Hibernate 一对多的CRUD

Save方法

1.保存多的一方,会自动把关联表(一的一方)保存。

public void testSaveUser(){
		
		User u = new User();
		u.setName("u1");
		Group g = new Group();
		g.setName("g1");
		u.setGroup(g);
		User u2 = new User();
		u2.setName("u2");
		u2.setGroup(g);
		
		Session session = sessionFactory.getCurrentSession();
		
		session.beginTransaction();
		
		session.save(u);
		session.save(u2);
		
		session.getTransaction().commit();
	
	}

2.保存一的一方
单向时只需要在主导一方(即多的一方)设置cascade的值为All

@ManyToOne(cascade=(CascadeType.ALL)
			)
	public Group getGroup() {
		return group;
	}
public void testSaveGroup(){
		
		User u1 = new User();
		u1.setName("u1");
		User u2 = new User();
		u2.setName("u2");
		Group g = new Group();
		g.setName("g1");
		g.getUsers().add(u1);
		g.getUsers().add(u2);
		
		Session session = sessionFactory.getCurrentSession();
		
		session.beginTransaction();
		
		session.save(g);
		
		session.getTransaction().commit();
	
	}

如果是一对多双向,不仅需要在不是主导一方(即一的一方)设置cascade的值,还需要再代码中手动添加多的一方保存一的一方的代码

public void testSaveUser(){
		
		User u = new User();
		u.setName("u1");
		Group g = new Group();
		g.setName("g1");
		u.setGroup(g);
		User u2 = new User();
		u2.setName("u2");
		u2.setGroup(g);
		
		Session session = sessionFactory.getCurrentSession();
		
		session.beginTransaction();
		
		session.save(u);
		session.save(u2);
		
		session.getTransaction().commit();
	
	}

Update方法

public void testUpdateUser(){
		
		testSaveUser();
		
		Session session = sessionFactory.getCurrentSession();
		
		session.beginTransaction();
		User u = (User)session.get(User.class,1);
		session.getTransaction().commit();
		
		u.setName("zhuangsan");
		u.getGroup().setName("group");
		
		Session session2 = sessionFactory.getCurrentSession();
		
		session2.beginTransaction();
		session2.update(u);
		session2.getTransaction().commit();
		
	}

Delete方法

要想有关联关系,先设定关联关系为null,再删除对应的记录,如果不删除记录,该记录就会变成垃圾数据,或者使用EJBQL。

方法 一

Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		//设置cascade的值为all,先查询是否有这一条主键为1记录,然后再删除
		User u = session.load(User.class, 1);
		u.setGroup(null);
	    session.delete(u);
	
		session.getTransaction().commit();

方法 二

Session session = sessionFactory.getCurrentSession();
		session.beginTransaction();
		session.createQuery("delete from User u where u.id= 1 ").executeUpdate();
		session.getTransaction().commit();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值