Hibernate 测试对象的导航问题

版权声明:博客知识产权来源命运的信徒,切勿侵权 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();

	}
}

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/84748505
今日推荐