我想用一个链接表来映射Hibernate中的多到多。我有两个班,家长班和孩子班,例如:
public class Parent{
private List<Child> _children;
//...getters and setters
}我使用一个链接表(link_table),包括link_id、parent_id和child_id三列。数据库是server,id类型是统一标识符。所以,我通常用guid作为id字段。
如果这是要使用的正确标记,那么如何使用<list />标记来实现这一点?你知道有什么好的文件可以完成这个任务吗?
我目前正在获得一个ConstraintViolationException,但还没有找到任何好的文档或示例。
我认为一个主要的问题是:如何指定在链接表. link_id中自动生成的.
发布于 2008-12-23 02:49:50
我不认为向join表中添加link_id主键是可能的(或必要的)。联接表通常由两个参与表的主键组成。
使用XML时,您将需要如下语法:
<class name="Parent">
....
<list name="children" table="link_table">
<key column="parent_id"/>
<many-to-many column="child_id"
class="Children"/>
</list>
...
</class>
<class name="Child">
...
<list name="parents" inverse="true" table="link_table">
<key column="child_id"/>
<many-to-many column="parent_id"
class="Parent"/>
</list>
...
</class>尽管我发现注释更适合使用。
发布于 2008-12-23 01:30:42
我使用注释(特别是@ManyToMany和@JoinTable)来完成此操作:
Hibernate文档:
@Entity
public class Employer implements Serializable {
@ManyToMany(
targetEntity=org.hibernate.test.metadata.manytomany.Employee.class,
cascade={CascadeType.PERSIST, CascadeType.MERGE}
)
@JoinTable(
name="EMPLOYER_EMPLOYEE",
joinColumns=@JoinColumn(name="EMPER_ID"),
inverseJoinColumns=@JoinColumn(name="EMPEE_ID")
)
public Collection getEmployees() {
return employees;
}
}
@Entity
public class Employee implements Serializable {
@ManyToMany(
cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "employees",
targetEntity = Employer.class
)
public Collection getEmployers() {
return employers;
}
}发布于 2008-12-23 00:33:08
我不确定对于现有的数据库和现有的数据,您是否可以轻松地完成这个任务。当您第一次连接时,Hibernate通常最好定义自己的数据模式。
我只使用了很多批注,但我认为hibernate文档提供了基于XML的示例:链接文本。
https://stackoverflow.com/questions/387806
复制相似问题