Я новичок в Hibernate соединениях между сущностями и таблицами.Hibernate соединения: @OneToMany, @JoinTable или @SecondaryTable?
Я хочу иметь следующую модельную схему (сущности в базе данных):
User Seminar SeminarParticipation
----- ------- --------------------
id id seminar_id
name name user_id
... ... role
Я знаю, что третья таблица с сущностями coud создаются автоматически @ManyToMany, но имеет дополнительное поле, так что я хотите иметь полную сущность, чтобы упростить доступ к Java.
Я также хочу получить участие в Seminar
и User
объектов.
Мой вопрос заключается в том, как наилучшим образом отобразить эти объекты на Java без возможных нескольких запросов в DAO в будущем?
Я попробовал этот подход:
Seminar
класс (User
похож):
@Entity
@Table(name = "seminars")
public class Seminar {
@Id
@GeneratedValue
private int id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<SeminarParticipation> participations;
...
}
И SeminarParticipation
класс:
@Entity
@Table(name = "seminar_participations")
public class SeminarParticipation {
@Id
@GeneratedValue
private int id;
@ManyToOne
private Seminar seminar;
@ManyToOne
private User user;
@Column(nullable = false)
private int role;
...
}
Но этот код пытается создать еще одну таблицу, и моя цель состоит только в том, чтобы сопоставлять эти объекты между собой, и было бы признательно, если бы изменил List<SeminarParticipation>
в Seminar
или User
будет влиять на объекты в таблице SeminarParticipation
, а также при работе с SeminarDAO
или UserDAO
.
Я также нашел решение с @JoinTable и @SecondaryTable, но I'am не уверена, что они могут помочь ...
Спасибо. Это помогло. Однако у меня все еще есть проблемы, связанные с каскадом слияния, см. Эту тему: http://stackoverflow.com/questions/36618201/hibernate-merge-does-not-delete-onetomany-old-entities – Luo