hibernate自连接--典型的oracle自带emp实现
用S2SH三大框架整合,用了oracle自带的表emp,实现了自连接。
pojo类:
public class Emp implements java.io.Serializable {
// Fields
private Short empno;
private Dept dept;
private String ename;
private String job;
private Short mgr;
private Date hiredate;
private Double sal;
private Double comm;
//添加一个需要的属性--上级名称-->持有自己的引用(上级也来自员工表)
//必须是一对多双向 因为上级也出自员工表 一个上级同样是一个员工 他可能有多个下级
private Emp empmgr;
private Set<Emp> emps = new HashSet<Emp>();
//get and set.....
}
Emp.hbm.xml部分:
<hibernate-mapping>
<class name="com.wepull.pojo.Emp" table="EMP" schema="SCOTT" >
<id name="empno" type="java.lang.Short">
<column name="EMPNO" precision="4" scale="0" />
<generator class="increment"></generator>
</id>
<many-to-one name="dept" class="com.wepull.pojo.Dept" fetch="select"
lazy="false">
<column name="DEPTNO" precision="2" scale="0" />
</many-to-one>
<!-- 自连接配置 手动增加部分 缺一不可 -->
<many-to-one name="empmgr" class="com.wepull.pojo.Emp"
update="false" insert="false" >
<column name="mgr"></column>
</many-to-one>
<set name="emps" cascade="save-update" inverse="true">
<key column="mgr"></key>
<one-to-many class="com.wepull.pojo.Emp"/>
</set>
<property name="ename" type="java.lang.String">
<column name="ENAME" length="10" />
</property>
<property name="job" type="java.lang.String">
<column name="JOB" length="9" />
</property>
<property name="mgr" type="java.lang.Short">
<column name="MGR" precision="4" scale="0" />
</property>
<property name="hiredate" type="java.util.Date">
<column name="HIREDATE" length="7" />
</property>
<property name="sal" type="java.lang.Double">
<column name="SAL" precision="7" />
</property>
<property name="comm" type="java.lang.Double">
<column name="COMM" precision="7" />
</property>
</class>
</hibernate-mapping>
其他部分无需过多阐述,既然能用框架了,别的都是小问题了,个人感觉自连接是个新知识点,所以在此记下以备所需。起初是想单单通过修改HQL语句来实现自连接,可是没有成功,自己也认定不能成功,因为查出的东西无法和pojo实体类映射。后来网上查找发现要和自己实现一对多双向关联来实现自连接,这的确是个好方法,也容易理解。
==================================
赵客缦胡缨,吴钩霜雪明。
银鞍照白马,飒沓如流星。
==================================