TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
1,在Jd.xml中去掉对应Qx的qxid的property配置,添加:
<many-to-one name="qx" class="com.zhangjie.hib.entity.onetomanyOrmanytoone.Qx" column="qxid" lazy="false" cascade="save-update">
</many-to-one>
2,在Jd.java中添加Qx对象属性,使用jd.setQx(qx)建立jd与qx的多对一关联
在Qx.java中添加Set<Jd>集合对象,使用qx.setJds(jds)建立qx与jd的一对多关联
注:在多方Jd.java中去掉属性qxid
3,在建立双向一对多时,要在“一”的一方设置inverse="true"委托“多”的一方来维护
<set name="jds" cascade="save-update" inverse="true">
<key column="qxid"></key>
<one-to-many class="com.zhangjie.hib.entity.onetomanyOrmanytoone.Jd"/>
</set>
注:如在插入数据的时候,先插入Jd,再插入Qx,再更新Jd中的qxid,如果设置了inverse=true,那么更新数据就会从多的一方开始,这样就会避免外键的问题。
4,级联插入:
/**
* 使用双向一对多的方式实现插入数据
* 由one方来维护
*/
@Test
public void test1(){
Session session = HibernateSessionFactory.getSession();
Qx qx = new Qx();
qx.setQx("caowenping");
Jd jd = new Jd();
jd.setJd("cao");
jd.setQx(qx); //建立jd 到 qx 的多对一的关系
Jd jd1 = new Jd();
jd1.setJd("wen");
jd1.setQx(qx); //建立 jd1 到 qx 的多对一的关系
Jd jd2 = new Jd();
jd2.setJd("ping");
jd2.setQx(qx); //建立 jd2 到 qx 的多对一的关系
Set<Jd> jds = new HashSet<Jd>();
jds.add(jd);
jds.add(jd1);
jds.add(jd2);
qx.setJds(jds); //建立 qx 到 jd 的一对多的关系
Transaction tx = session.beginTransaction();
session.save(qx);
tx.commit();
session.close();
}
5,级联修改(重点):
/**
* 级联修改
*(不需要使用session.update()方法)
*/
@Test
public void test2(){
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction();
//下面为将id为8,qxid为2,改为qxid为1的一方,
Qx qx = (Qx)session.get(Qx.class,1);//首先从数据库中查询一条Qx记录
Jd jd = (Jd)session.get(Jd.class, 8);//在从数据库中查询一条Jd记录
jd.setQx(qx);//先建立关于Jd和Qx的多对一关系
Set<Jd> jds = new HashSet<Jd>();
jds.add(jd);
qx.setJds(jds);//再建立关于Qx和Jd的一对多关系
tx.commit();
session.close();
}
6,级联删除:
/**
* 级联删除
*在inverse=true和inverse=false的情况下测试
*/
@Test
public void test3(){
Session session = HibernateSessionFactory.getSession();
Qx qx = (Qx)session.get(Qx.class, 19);
Transaction tx = session.beginTransaction();
session.delete(qx);
tx.commit();
session.close();
}
|
|