Сопоставление двух объектов с одним - PullRequest
0 голосов
/ 05 июня 2018

У меня есть Contribution сущность

@Entity
public class ContributionEntity {

    private MovieEntity movie;

    private UserEntity user;
}

У обоих UserEntity и MovieEntity есть списки

private Set<ContributionEntity> contributions;

Я ищу способ правильно отобразить список так,что при добавлении вклада UserEntity и MovieEntity имели этот вклад в списке.Я сделал

// ContributionEntity

@ManyToOne
@JoinColumn(name = "movie_id")
private MovieEntity movie;

@ManyToOne
@JoinColumn(name = "user_id")
private UserEntity user;

// MovieEntity

@OneToMany(mappedBy = "movie", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();

// UserEntity

@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<ContributionEntity> contributions = new ArrayList<>();

Однако существует проблематаким образом, потому что я не могу добавить вклад в список в UserEntity и MovieEntity, потому что я добавлю один и тот же объект дважды в базу данных.

Какое отображение является правильным в этой ситуации?

1 Ответ

0 голосов
/ 05 июня 2018

Как вы сказали, добавление Contribution в оба списка не сработает, поскольку Hibernate не знает, что это один и тот же объект.Итак, вы можете, что довольно громоздко, создать Contribution, установить соответствующий Movie и добавить его к вкладу User.Или наоборот, добавьте User к вновь созданному Contribution и добавьте его в список взносов Movie.Имейте в виду, что вам также необходимо убедиться, что Contribution также сохраняется (например, @Cascade или сохранением его вручную).

Лучшим подходом было бы установить фокус на Contribution.Если вы создадите и сохраните Contribution, он будет автоматически присутствовать в обоих списках (но не в текущей транзакции, но, вероятно, в любом случае это не требуется).

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