我做了一个实验...两个Spring数据存储库的一个通用实体:

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

spring 数据jpa:1.7.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;
    }
}

JPA存储库具有以下外观:

public interface Repository extends CrudRepository<Account, Long> {
    public Account findByNumber(String number);
}

MongoDB存储库具有以下外观:

包ua.家springdata.调查存储库.Mongo ;

public interface Repository extends CrudRepository<Account, Long> {
}

所以JPA有效:)没什么特别的:)

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?太奇怪了.

推荐答案

默认情况下,mongo集合中的id为string.要在集合中维护OBEJCT的长id,可以 Select 一个单独的字段,如下所示:

  @Id
  @Field("_id")
  @JsonIgnore
  private String id;

  @Field("my_object_id")
  private Long myObjectId;

Mongodb相关问答推荐

如何根据两个 struct 创建一个Mongo文档?

MongoDB:如何获取多个$indexOfArray值?

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

从 Amazon S3(Next.js、Mongodb、Mongoose)删除图像

来自嵌套对象数组的 MongoDB 聚合

使用 mongo-driver/mongo 使用键/值对中的值表达式查找文档

在mongodb中,如何使用聚合来获取字段之间的对应关系

mongodb:多键索引 struct ?

GeoJSON 和 MongoDB:将点存储为 GeoJSON.Point 是否值得?

不能在模块外使用 import 语句

如何使用 c# 2.0 驱动程序将数据插入到 mongodb 集合中?

MongoDB中超过2GB的数据库

mongodb nodejs - 转换圆形 struct

MongoDB 嵌套 OR/AND 在哪里?

带有部分字符串的mongoose文本搜索

使用 MongoDB 的 map/reduce 来分组两个字段

MongoError: The dollar ($) prefixed field '$push' in '$push' is not valid for storage

在 Ubuntu 13.10 (saucy) 中安装 Mongodb PHP 扩展的最简单方法?

在mongoose中查询虚拟属性

如何在 Ubuntu 10.04 中使用 --auth 选项重新启动 mongodb?