`
QmoreCzs
  • 浏览: 8924 次
社区版块
存档分类
最新评论

学习笔记8——关联关系CURD之save方法

阅读更多
假设两个对象User和Group,在数据库模型上Group为主表,User为从表,属于一对多的关系。
hibernate进行save操作时候,如何进行联级操作。
普通的做法:在session事务中先进行主表的save操作,使对象转化为persisent状态,再进行从表User的save操作。
@Test
	public void testSaveUser(){
		User u = new User();
		u.setName("CZS") ;
		Group g = new Group();
		g.setName("g1") ;
		//g.setId(1) ;
		u.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		session.save(g) ;
		session.save(u) ;
		session.getTransaction().commit() ;
	}


那么当我们想,已经在表之中确定好两个表之间的关系,如何在hibernate进行子表操作的时候同时自动操作主表对象,让hibernate自动进行联级操作?
可以在对象模型的@ManyToOne中设定属性cascade[]:
@ManyToOne(cascade={CascadeType.ALL})
@ManyToOne(cascade={CascadeType.ALL})
	@JoinColumn(name="t_groupid")
	public Group getGroup() {
		return group;
	}
	public void setGroup(Group group) {
		this.group = group;
	}
	

进行Save:
	@Test
	public void testSaveUser(){
		User u = new User();
		u.setName("CZS") ;
		Group g = new Group();
		g.setName("g2") ;
		//g.setId(1) ;
		u.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		//session.save(g) ;
		session.save(u) ;
		session.getTransaction().commit() ;
	}







同理存储主表级联子表操作在主表对象加入@OneToMany(cascade={CascadeType.ALL}):
@OneToMany(mappedBy="group",cascade={CascadeType.ALL})
	public Set<User> getUsers() {
		return users;
	}
	public void setUsers(Set<User> users) {
		this.users = users;
	}


session操作则比较麻烦,需要相互设置两个对象模型之间的关系:
         @Test
	public void testSaveGroup(){
		User u1 = new User();
		u1.setName("CZS") ;
		User u2 = new User() ;
		u2.setName("LMY") ;
		Group g = new Group();
		g.setName("g1") ;
		Set<User> users = new HashSet<User>() ;
		users.add(u1) ;
		users.add(u2) ;
		g.setUsers(users) ;
		u1.setGroup(g) ;
		u2.setGroup(g) ;
		Session session = sessionFactory.getCurrentSession() ;
		session.beginTransaction() ;
		session.save(g) ;
		session.getTransaction().commit() ;
	}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics