我正在尝试用Hibernate(3.6)实现一个特定的行为,因为我无法找到任何信息。
基本上,我想在两个表之间建立多对多的关系,如下所示:
class Task {
private Long id;
private Set<Person> personsInCharge;
private Set<Person> contributors;
private Set<Person> validators;
}
class Person {
private Long id;
private Set<Task> tasks;
}
我的问题是,同一个人可以根据任务或同一任务的不同角色拥有不同的角色,因此无法为此人定义“固定”角色。 所以,如果我可以有一个连接表,我可以添加一个特定的“角色”作为第三个主键,然后在我的映射文件中使用自定义加载器,这将是方便的。 有没有办法使用Hibernate定义它,或者我应该创建一个特定的过渡POJO(或“手工”表)?
提前感谢您的任何反馈。
答案 0 :(得分:1)
这听起来更像是一个标准的“多对多”&#39;映射到我,我认为它可以实现如下..
class Task {
private Long id;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "task_incharge", joinColumns = { @JoinColumn(name = "task_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "person_id", referencedColumnName = "id") })
private Set<Person> personsInCharge;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "task_contributors", joinColumns = { @JoinColumn(name = "task_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "person_id", referencedColumnName = "id") })
private Set<Person> contributors;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "task_validators", joinColumns = { @JoinColumn(name = "task_id", referencedColumnName = "id") }, inverseJoinColumns = { @JoinColumn(name = "person_id", referencedColumnName = "id") })
private Set<Person> validators;
}
这里我们有三个额外的中间表,即task_incharge,task_contributors和task_validators。
同样,你需要Person类中的多对多集合,即
private Set<Task> contributedTasks;
private Set<Task> validatedTasks;
private Set<Task> inchargeOf;
为这些使用相同的映射表,只需将@JoinTable内的@JoinColumn顺序颠倒到内部订购