hibernate学习笔记——mappedBy属性详解

hibernate学习笔记——mappedBy属性详解

time : 2014年5月24日12:35:56

mappedBy 用来指定那一方是控制方,控制方能对被控制方进行维护。

注意 双向映射必设mappedBy,mappedby只能出現在@oneToOne,@oneToMany,@ManyToMany一方,
          不能出現在@ManyToOne一方,把多的一方设置为控制方。

例子:
        说明:t_user 和 t_role 是多对多关联。
t_user表:
@ManyToMany(mappedBy = "userSet",cascade=CascadeType.REFRESH,fetch=FetchType.LAZY)
	private Set<Role> roleSet = new HashSet<Role>();

t_role表:
@ManyToMany
	@JoinTable(name="user_role",joinColumns={@JoinColumn(name="role_id")},inverseJoinColumns={@JoinColumn(name="user_id")})
	private Set<User> userSet = new HashSet<User>();

(还有一张关联user_role表)
在t_user表的多对多设置了mappedBy="userSet"(对应t_role表中的userSet)

看下面例子,向关联表user_role中添加记录:
	@Test 
	public void updateUser_role(){
		//由user来维护中间表,发现中间表的数据并没有添加进去。
//		User user = userDao.load(3L);
//		Set<Role> roles = new HashSet<Role>();
//		roles.add(roleDao.load(2L));
//		user.setRole(roles);
//		userDao.update(user);
		//由role来维护中间表,添加成功
		Role role = roleDao.load(1L);
		User user = userDao.load(3L);
		Set<User> users = new HashSet<User>();
		users.add(user);
		role.setUser(users);
		roleDao.update(role);	
	}
说明: user这边设置了 mappedby = “userSet”属性,它指的是role类里面的Set<User> userSet  
*        此处的意思就是说,user是被控制方,role是控制方。他们的中间表的数据应该是由控制方来维护,也就是说由role来维护。
*        所以在添加数据时会出现下列问题:
*          user = User.setRole(roleSet);
*          userDao.update(user)或者save(user) 中间表的数据会添加不了。这就是原因所在之处。
*        如果这样:
*          role = role.set(userSet);
*          roleDao.update(role)或者save(role) 中间表的数据就会被添加进去。


 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值