作者:bale999_816 | 来源:互联网 | 2023-09-24 20:25
示例:类Org表示组织机构,是一个典型的树状结构数据,其属性包括:id,name,children,parent要将Org映射到数据库中,对parent作多对一的映射,对child
示例:
类Org表示组织机构,是一个典型的树状结构数据,其属性包括:
id,name,children,parent
要将Org映射到数据库中,对parent作多对一的映射,对children作一对多的映射。
我们可以通过三张表来解释其关系
代码实现:
1.建Org实体类
@Entity
public class Org {
private int id;
private String name;
private Set childen = new HashSet();
private Org parent;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(mappedBy="parent",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
public Set getChilden() {
return childen;
}
public void setChilden(Set childen) {
this.childen = childen;
}
@ManyToOne
public Org getParent() {
return parent;
}
public void setParent(Org parent) {
this.parent = parent;
}
}
2.建Junit测试类
@Test
public void testDelete() {
new SchemaExport(new Configuration().configure()).create(true, true);
}
运行程序,在数据库中自动生成表org,有3个属性:id,name,parent_id(外键)
3.存储数据
@Test
public void testSave() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Org o = new Org();
o.setName("总公司");
Org o1 = new Org();
o1.setName("分公司1");
Org o2 = new Org();
o2.setName("分公司2");
Org o11 = new Org();
o11.setName("分公司1_部门1");
Org o12 = new Org();
o12.setName("分公司1_部门2");
Org o21 = new Org();
o21.setName("分公司2_部门1");
o.getChilden().add(o1);
o.getChilden().add(o2);
o1.getChilden().add(o11);
o1.getChilden().add(o12);
o2.getChilden().add(o21);
o11.setParent(o1);
o12.setParent(o1);
o21.setParent(o2);
o1.setParent(o);
o2.setParent(o);
session.save(o);
session.getTransaction().commit();
}
4.打印输出
@Test
public void testLoad() {
Session session = sf.getCurrentSession();
session.beginTransaction();
Org o = (Org) session.load(Org.class, 1);
print(o,0);
session.getTransaction().commit();
}
//通过递归方式,以树状结构,打印输出各对象的名字
private void print(Org o,int level) {
for(int i=0;i输出结果
总公司
----分公司1
--------分公司1_部门2
--------分公司1_部门1
----分公司2
--------分公司2_部门1
Hibernate 树状映射,,
Hibernate 树状映射