当前位置: 首页 > 知识库问答 >
问题:

Spring数据MongoDB。生成ID的错误

秦彦君
2023-03-14

我做了一个实验...两个Spring数据存储库的一个公共实体:-jpa-mongoDB

首先,我使用以下库版本:

发布spring-data-jpa:1.7.0.发布spring-data-mongodb:1.6.0.发布

@Entity
@Table(name = "ACCOUNTS")
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "ACCOUNT_ID")
    private Long id;

    @Column(name = "ACCOUNT_NUMBER")
    private String number;

    public Account() {
    }

    public Account(String number) {
        this.number = number;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}
public interface Repository extends CrudRepository<Account, Long> {
    public Account findByNumber(String number);
}
public interface Repository extends CrudRepository<Account, Long> {
}
org.springframework.dao.InvalidDataAccessApiUsageException: Cannot autogenerate id of type java.lang.Long for entity of type ua.home.springdata.investigation.entity.Account!
    at org.springframework.data.mongodb.core.MongoTemplate.assertUpdateableIdIfNotSet(MongoTemplate.java:1149)
    at org.springframework.data.mongodb.core.MongoTemplate.doSave(MongoTemplate.java:878)
    at org.springframework.data.mongodb.core.MongoTemplate.save(MongoTemplate.java:833)
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:73)
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:88)
    at org.springframework.data.mongodb.repository.support.SimpleMongoRepository.save(SimpleMongoRepository.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:442)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:427)
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:381)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy26.save(Unknown Source)

我觉得这是个很普通的案子。为什么Spring数据不能生成一样长的实体id?太奇怪了。

共有1个答案

韩欣怿
2023-03-14
  @Id
  @Field("_id")
  @JsonIgnore
  private String id;

  @Field("my_object_id")
  private Long myObjectId;
 类似资料:
  • 我使用的是SpringBoot(1.4)、SpringData和jpa。使用我的表/实体之一的ID列(crudepository),我想生成自定义字符串。从一些特定的字符串加上创建数据和时间开始,以db中的下一个值结束。所以这里我不能使用,我需要一些本地查询,比如“selectnextvalue” 有没有更好的方法可以做到这一点。

  • 我在使用聚合框架从MongoDB读取文档时遇到了问题:我的结果中总是得到空ID。这只发生在具有复合ID的文档中。我尝试了各种版本的spring-data-mongob(1.10.12, 2.0.7),结果相同。 实体定义类 测试代码 输出 调试到以下方法MappingMongoConverter。read(final mongopersistenentity entity、final Docume

  • 我目前正在将我所做的一个项目从使用Hibernate的Spring Data转换为使用ElasticSearch的Spring Data。 以前,我能够使用注释自动生成实体的id。这样,当实体被保存时,就会为它生成一个id号。 使用Hibernate注释的实体: 是否存在与@GeneratedValue注释等价的ElasticSearch?如果不是,使用ElasticSearch时填充id字段的最

  • 问题内容: 当我将Mongodb与Java结合使用时,我想在客户端生成对象ID。但是,在插入记录之前,我必须先查询mongodb以确保由ObjectId()方法生成的ID是唯一的。有什么方法可以生成唯一的对象ID,而无需两次访问mongodb? 问题答案: 对象ID与您在RDMS中使用的顺序ID不同。如果它们是根据对象ID规范正确生成的,则无需担心它们是唯一的。 您要做的就是确保始终创建一个新的对

  • 我已经使用MongoDB启动了一个新的Spring Boot应用程序(2.2.1.RELEASE)。 为了创建一些API文档,我添加了springdoc API: 由于我依赖Spring来处理RESTendpoint的生成,因此我创建了以下简单的存储库: 所以我没有使用的类。 我试图添加一些ProfileRepository中方法的注释,但不会生成任何内容。 : 如何为Spring数据REST存储

  • 我有以下数据模型 和spring数据存储库接口 但findByIdIn方法返回一个空列表,即使mongodb中存在ID。我已经为文档中的其他字段测试了findbyxxin(),它们都工作得很好。但当涉及到文档id时,情况并非如此。 这是我第一次使用mongoDB,但我熟悉Spring data jpa。 我知道 但我还需要对结果应用分页,因此对我的情况没有帮助。 我尝试使用@Query(带有in查