java - 引用类 Morphia 上的索引违规

标签 java mongodb java-ee-6 morphia

我正在尝试与吗啡(0.99)/mongoDB(2)保持一对多(汽车)关系。当我尝试保留类 Car 并引用类 Owner 时,Morphia 抛出 MongoException$DuplicateKey 异常。这很奇怪,因为我认为吗啡中不存在级联持续存在。

当我持久化 Car 时,为什么吗啡会在引用的类 Owner 上的索引 *index_username* 上引发重复键异常?

波乔:

@Entity(noClassnameStored=true, value="base")
public class Base {

    @Id
    private ObjectId id;
    ...


@Entity(value = "owner", noClassnameStored = true)
@Polymorphic
public class Owner extends Base {

    @Indexed(value = IndexDirection.ASC, unique=true, dropDups=true, name="index_username")
    private String userName;

    @Reference
    private Set<Car> cars = new HashSet<Car>();
    ... 

@Entity(value="car", noClassnameStored=true)
@Polymorphic
public class Car extends Base{
    @Reference
    private Owner owner

bean :

car.setOwner(owner);
BeanUtil.getDataStore().save(car);

异常(exception):

com.mongodb.MongoException$DuplicateKey: E11000 duplicate key error index: myapp.car.$index_username  dup key: { : null }

最佳答案

您不能添加多个 null 引用。为所有实体添加一个值(最多 1 个可能为 null),或者在索引上设置 sparse=true,这样您就可以拥有唯一的值,但允许多个 null

关于java - 引用类 Morphia 上的索引违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11360039/

相关文章:

node.js - 将对象数组保存到数据库 Nodejs 和 MongoDB

mongodb - 如何更新 mongodb 中的集合

java - ejb-jar.xml 环境条目枚举

java - Eclipselink:如何检查是否使用了连接池

java - 当我读取文本文件时如何跳行?

python - 在继续之前如何/最好的方式等待 Mongod 实例启动

java - 在 Web 应用程序之间共享应用程序范围数据数据?

java - Vector中排序的实现

Java崩溃!使用 jni 和 jpeg62.dll 时的 NTDLL.DLL

java-ee-6 - 为什么每次 web 和 ejb 容器之间都会调用 LoginModule?