版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/84748505
Demo说明:
kind主体类和user主体类都是主控方
<!--配置关联对象 -->
<!-- set标签
*name属性 多的一方的集合的属性名称 -->
<set name="users" cascade="save-update">
<!-- key标签
*column属性 :多的一方的外键的名称-->
<key column="kinds"></key>
<!-- one-to-many标签
*class属性:多的一方的类的全路径 -->
<one-to-many class="cn.com.dao.User" />
</set>
<many-to-one name="k_kinds" class="cn.com.dao.Kinds" column="kinds" cascade="save-update"/>
kind表有一条信息:会计
user表里有三条信息;
package cn.com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo7 {
@Test
public void demo() {
/*
* author:命运的信徒 date:2018/12/3 aim:测试对象的导航问题
*/
// 1.建立连接
Session session = Hibernate_Utils.openSession();
// 2.开启事务、
Transaction tx = session.beginTransaction();
// 3.实体类的操作
Kinds k = new Kinds();
k.setKinds("会计");
User u = new User();
u.setName("夏之星");
u.setNumber("999");
User u1 = new User();
u1.setName("欧亚若");
u1.setNumber("888");
User u2 = new User();
u2.setName("vill");
u2.setNumber("777");
// 4 建立关系
// 4.1 u和k互联 999 夏之星 会计
u.setK_kinds(k);
// 4.2 会计 777 vill
k.getUsers().add(u2);
// 4.3 会计 888 欧亚若
k.getUsers().add(u1);
// 5.我保存的是4.1数据,双方的2条数据;被控方有数据更新的同时
session.save(u);
tx.commit();
session.close();
}
}
原因:
session.save(uuser表中插入了999 夏之星 会计这一条信息);被执行的时候,
user表作为主控方,被控方是kind,
存在u.setK_kinds(k); 主控方发送增删改,被控方也更新操作,kind插入数据会计这一条信息;
kinds是主控方,被控方是user;
存在着 k.getUsers().add(u2); k.getUsers().add(u1); 关联关系, 主控方发送增删改,被控方也更新操作,user表插入u2 u1两条信息;
误区:
虽然kind和user表都是主控方,但不是说只要保存一方操作,对kind表和user表的操作都有效;是根据建立关系来看的;
以下这个例子就可以很好的说明:
user表和kind表都是主控方
结果是kind表插入会计这一条信息
user表插入的只有两条信息;u和u2
没有u1,因为u1没有和k建立关系;
package cn.com.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import cn.com.dao.Kinds;
import cn.com.dao.User;
import cn.com.util.Hibernate_Utils;
public class Demo7 {
@Test
public void demo() {
/*
* author:命运的信徒 date:2018/12/3 aim:测试对象的导航问题
*/
// 1.建立连接
Session session = Hibernate_Utils.openSession();
// 2.开启事务、
Transaction tx = session.beginTransaction();
// 3.实体类的操作
Kinds k = new Kinds();
k.setKinds("会计");
User u = new User();
u.setName("夏之星");
u.setNumber("999");
User u1 = new User();
u1.setName("欧亚若");
u1.setNumber("888");
User u2 = new User();
u2.setName("vill");
u2.setNumber("777");
// 4 建立关系
// 4.1 u和k互联 999 夏之星 会计
u.setK_kinds(k);
// 4.2 会计 777 vill
k.getUsers().add(u2);
// 5.我保存的是4.1数据,双方的2条数据;被控方有数据更新的同时
session.save(u);
tx.commit();
session.close();
}
}