来看看通过单表来实现一个树形结构的方式。这里假设有这样一个实体名叫儿子,一个儿子只能有一个父亲,而一个父亲可能有多个儿子,因为父亲本身也是他自身父亲的儿子,所以在这里他们的属性没有什么区别。
一。Son
package com.aaxis.model;
/**
* User: Zhong Gang
*/
public class Son {
private Integer id;
private Integer version;
private String name;
private Son dad;
public Son() {
}
public Son(String name) {
this.name = name;
}
public Son(String name, Son dad) {
this.name = name;
this.dad = dad;
}
}
二。hbm映射配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping default-access="field"> <class name="com.aaxis.model.Son" table="son"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <version name="version" column="version" type="java.lang.Integer"/> <property name="name" column="name" type="java.lang.String" index="person_name"/> <many-to-one name="dad" column="dad_id" class="com.aaxis.model.Son"/> </class> </hibernate-mapping>
三。测试代码
package com.aaxis;
import com.aaxis.model.Son;
import junit.framework.TestCase;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 10/24/11
* Time: 11:50 AM
*/
public class HibernateCoreTest extends TestCase {
public void testSon() throws Exception {
Son dad = new Son("dad");
Son son1 = new Son("son1", dad);
Son son2 = new Son("son2", dad);
Son son3 = new Son("son3", dad);
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.saveOrUpdate(dad);
session.saveOrUpdate(son1);
session.saveOrUpdate(son2);
session.saveOrUpdate(son3);
transaction.commit();
session.close();
}
}
四。数据表结构及测试截图
最后附上源码以供各位参考