JPA OneToOne OneToMany на дубликатах одного и того же класса в списке - PullRequest
1 голос
/ 13 июля 2020

У меня есть следующий код:

@OneToOne(cascade = ALL)
private SquadMember commander;

@OneToOne(cascade = ALL)
private SquadMember lieutenant;

@OneToMany(orphanRemoval = true, cascade = REMOVE, mappedBy = "squad")
private Set<SquadMember> memberList = new LinkedHashSet<>();

Когда я добавляю командира или лейтенанта, они оказываются в таблице SquadMember, а когда я извлекаю memberList из базы данных, включаются командир и лейтенант в memberList (в основном дублируется, поскольку они находятся в отряде как командир / лейтенант, но также как член).

Как я могу это исправить, чтобы командир / лейтенант никогда не появлялся в memberList при извлечении из базы данных ?

Сообщения, которые я уже просматривал, но не нашел ответа: JPA OneToOne и OneToMany на одном объекте

1 Ответ

0 голосов
/ 30 июля 2020
• 1000 чтобы зарегистрировать лейтенанта и заполнить его отряд, когда у вас есть только один параметр, JPA и Hibernate свяжут его как часть отношения ONE-TO-MANY.

Убедитесь, что в сущности SquadMember у вас есть следующий :

//Relation members with squad
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SQUAD_ID")
private Squad squad;

//Relation bidirectional for lieutenant
@OneToOne(fetch = FetchType.LAZY, mappedBy = "lieutenant")
private Squad squadLt;

//Relation bidirectional for commander
@OneToOne(fetch = FetchType.LAZY, mappedBy = "commander")
private Squad squadCm;

Например, если вам нужно обновить командующего, используйте squadCM, et c ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...