2012-07-06 1 views
1

Я пытаюсь сохранить одного (Владелец) для многих (Car) отношений с морфией (0.99)/mongoDB (2). Когда я пытаюсь сохранить класс Car со ссылкой на класс Owner, Morphia выдает исключение MongoException $ DuplicateKey. Это странно, так как я думал, что каскадный упор не существовал в морфий.Нарушение индекса по ссылочному классу, Morphia

Почему морфия бросает дублирующее ключевое исключение для индекса * index_username * на ссылочном классе Owner, когда я сохраняю автомобиль?

Pojo:

@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); 

Исключение:

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

я должен сказать, что сохраняющееся первый объект Car со ссылкой на владелец работает отлично , – Chris

ответ

1

Вы не можете добавить более одного null ссылки. Либо добавить значение для всех объектов (до 1 может быть null) или установить sparse=true по индексу, так что вы можете иметь уникальные значения, но позволяет множественные null

+0

Мне пришлось удалить/удалить всю БД, затем он начал работать. Угадайте, что он кэшировал индекс из-за чего-то?! Что означает разреженный в Morphia, java-документ не объясняет многое (кроме допустимых значений)? – Chris

+1

Странно, что вам пришлось сбросить всю БД - предположил бы, что сбросить индекс было бы достаточно. Sparse сообщает индексу, что он должен игнорировать нулевые значения при уникальных проверках; поэтому вы можете иметь несколько нулевых значений, в то время как все ненулевые должны быть уникальными. Надеюсь, что это станет более ясным. – xeraa

 Смежные вопросы

  • Нет связанных вопросов^_^