Mongo @DBRef уникальный

В моем приложении используется Spring Boot / JPA / MongoDB.

Я сопоставляю свои классы домена с MongoDB, используя

org.springframework.data.mongodb.core.mapping.Document;
org.springframework.data.mongodb.core.index.Indexed;
org.springframework.data.mongodb.core.mapping.DBRef;

Все хорошо, за исключением попыток сделать DBRef уникальным:

@DBRef @Indexed(unique = true)
private User owner;

Я пробовал разные комбинации @DBRef, @Indexed (unique = true) и не могу сделать DBRef уникальным. Я могу сделать другие типы полей уникальными, например "имя" в следующем примере.

@Indexed(unique = true)
@Size(min = 2, max = 100)
@Column(length = 100)
private String name;

но не могу найти, как сделать поле DBRef уникальным.


person mikec    schedule 10.06.2015    source источник
comment
Из интереса: как выглядит индекс на уровне базы данных (colleciton.getIndexes())   -  person xeraa    schedule 11.06.2015
comment
@xeraa - пожалуйста, посмотрите код ниже. Я заменил поле "name" с плохим именем на smeCode. Владелец DBRef - это переменная, вызывающая нарушение. Я использовал db.NT_SMES.getIndexes (), владелец не индексируется. smeCode и _id указаны как индексы. (Извините за то, что не опубликовал код - мне не удалось правильно отформатировать комментарий)   -  person mikec    schedule 11.06.2015


Ответы (1)


Я исхожу из картирования со стороны Морфии, но я бы попробовал следующее:

@CompoundIndexes({
    @CompoundIndex(name = "owner", def = "{'owner.id' : 1}", unique = true)
})
person xeraa    schedule 11.06.2015
comment
Спасибо @xeraa. Составной индекс - это не то, что мне здесь нужно. Я хочу отметить переменную DBRef как уникальную. - person mikec; 11.06.2015
comment
Вы пробовали это? Это должно идти в правильном направлении: stackoverflow.com/a/15819034/573153 Поскольку вы не хотите индексировать владелец, но идентификатор владельца, вам нужно какое-то временное решение. Поэтому вам понадобится какая-то ассоциация на уровне класса, так как тот, который указан в атрибуте, не достигает его. - person xeraa; 11.06.2015
comment
@xeraa Я попробовал и поместил «уникальные» в разные места. По-прежнему не удается добиться того, чтобы «владелец» был уникальным. Я проверю документацию MongoTemplate по вашей ссылке. Большое спасибо - person mikec; 12.06.2015