| 
 
TA的每日心情|  | 开心 2021-3-12 23:18
 | 
|---|
 签到天数: 2 天 [LV.1]初来乍到 | 
 
| 
 1,对于多方:
 更改Jd.java
 去掉与一方对应的外键属性qxid;
 更改Jd.xml
 去掉qxid的配置
 <!--
 <property name="qxid" type="java.lang.Integer">
 <column name="qxid" not-null="true" />
 </property>
 -->
 添加
 <many-to-one name="qx" class="com.zhangjie.hib.entity.manytoone.Qx" column="qxid" lazy="false" cascade="save-update">
 name是指属性Jd的属性qx;column属性定义了映射到表TBL_JD的字段名,将使用这个字段作为外键去和"一"的一方主键关联;class属性为关联到“一”的一方的类;cascade=save-update是级联保存和更新;lazy=false支持级联查询。
 2,对于一方
 不需要修改
 3,级联查询代码:
 /**
 * 可以在session没有关闭的情况下,查询级联信息是可以的
 *
 */
 @Test
 public void test2(){
 Session session = HibernateSessionFactory.getSession();
 Jd jd = (Jd)session.get(Jd.class, 20);
 //显示多方的一个信息
 System.out.println(jd.getJd());
 //显示一方信息(测试包括在lazy=true,proxy的情况下)
 System.out.println(jd.getQx().getQx());
 session.close();
 }
 
 /**
 * 在session关闭的情况下,并且lazy=proxy的情况下,是不可以访问级联信息的
 *如果在lazy=false的情况下,会自动先查询级联信息
 */
 @Test
 public void test3(){
 Session session = HibernateSessionFactory.getSession();
 Jd jd = (Jd)session.get(Jd.class, 20);
 //显示多方的一个信息
 System.out.println(jd.getJd());
 session.close();
 
 //显示一方信息(测试包括在lazy=true,proxy的情况下)
 System.out.println(jd.getQx().getQx());
 
 }
 4,级联保存:
 /**
 * 单独保存Jd
 *
 */
 @Test
 public void test4(){
 Session session = HibernateSessionFactory.getSession();
 Transaction tx = session.beginTransaction();
 Jd jd = new Jd();
 jd.setJd("娄星区 ");
 
 Qx qx = new Qx();
 qx.setQxid(1);
 
 jd.setQx(qx);
 session.save(jd);
 tx.commit();
 session.close();
 }
 
 /**
 * cascade的值为none和true的条件下来试一下程序
 *
 */
 @Test
 public void test5(){
 Session session = HibernateSessionFactory.getSession();
 Transaction tx = session.beginTransaction();
 Jd jd = new Jd();
 jd.setJd("娄星区2");
 
 Qx qx = new Qx();
 qx.setQx("娄底市");
 
 jd.setQx(qx); //级联保存
 session.save(jd);
 tx.commit();
 session.close();
 }
 
 
  | 
 |