Я использую стандартный способ Hibernate от многих до многих отношений. Например, сотрудник с совещаниями следующим образом:Hibernate - много для многих - с таблицей констант
@Entity
@Table(name="EMPLOYEE")
public class Employee {
@Id
@Column(name="EMPLOYEE_ID")
@GeneratedValue
private Long employeeId;
@Column(name="FIRSTNAME")
private String firstname;
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name="EMPLOYEE_MEETING",
joinColumns={@JoinColumn(name="EMPLOYEE_ID")},
inverseJoinColumns={@JoinColumn(name="MEETING_ID")})
private Set<meeting> meetings = new HashSet<meeting>();
public Employee() {
}
public Employee(String firstname) {
this.firstname = firstname;
}
}
и встречи:
@Entity
@Table(name="MEETING")
public class Meeting {
@Id
@Column(name="MEETING_ID")
@GeneratedValue
private Long meetingId;
@Column(name="SUBJECT")
private String subject;
@ManyToMany(mappedBy="meetings")
private Set<employee> employees = new HashSet<employee>();
public Meeting(String subject) {
this.subject = subject;
}
}
Главный фрагмент кода:
Meeting meeting1 = new Meeting("Constant Subject");
Meeting meeting2 = new Meeting("Constant Subject");
Employee employee1 = new Employee("Sergey");
Employee employee2 = new Employee("Larry");
employee1.getMeetings().add(meeting1);
employee2.getMeetings().add(meeting2);
session.save(employee1);
session.save(employee2);
Пожалуйста, учтите, что я специально создал два собрания объекты с постоянным именем. В этом случае СОВЕЩАНИЕ ТАБЛИЦА будет сохраняться два разных строками групп, например:
MEETING EMPLOYEE_MEETING
Meeting_Id Subject Employee_Id Meeting_Id
1 Constant Subject 1 1
2 Constant Subject 2 2
Поскольку у меня будет всего лишь несколько постоянных значений как соответствующие тематики я хотел бы предотвратить дубликаты, и после выполнения той же коды, чтобы иметь такая ситуация:
MEETING EMPLOYEE_MEETING
Meeting_Id Subject Employee_Id Meeting_Id
1 Constant Subject 1 1
2 1
Я хочу Hibernate, чтобы понять, что таблица собрание набор констант, а не дублировать строки, если не neccesarry. Я пробовал с уникальным ограничением, но это не помогло. Есть ли способ достичь этого?