Closed ghost closed 11 years ago
1、这个根据实际情况选, 比如如果需要顺序 则使用List 否则就是Set 2、因为Set是不允许重复的,所以比如 Set.add(new User()) Set.add(new User())
则使用User的默认id 如果id默认是0 则第二个覆盖第一个; 因此造成问题,所以可以考虑 重写hashCode/equals 1、随机id 2、如果是默认值 则认为不相等
@ManyToMany(mappedBy = "roleList", fetch=FetchType.LAZY)
@Where(clause="del_flag='"+DEL_FLAG_NORMAL+"'")
@OrderBy("id") @Fetch(FetchMode.SUBSELECT)
@NotFound(action = NotFoundAction.IGNORE)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name = "sys_user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") })
@Where(clause="del_flag='"+DEL_FLAG_NORMAL+"'")
@OrderBy("id") @Fetch(FetchMode.SUBSELECT)
@NotFound(action = NotFoundAction.IGNORE)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public List
这样注解下的多对多双向关联,使用List,在通过role.SaveUser(user);的时候,会先执行delete all from user_role,然后再全部insert into。(输出的HQL语句中看出来的这个问题),而使用Set就不会这样,使用Set只会insert新值。
不建议多对多 还是使用两个一对多把 而且对于你这种用户-角色 根本不推荐这种做法 如一个角色可能对应许多用户 级联查 会全部查出, 也很难优化
使用非关联吧。 我几乎不用多对多(我还没有遇到很合适的场景)
你可以参考我的设计
好的@!谢谢您的解答~!感谢~
请教kaitao一个问题:
1》多对多关联,List/Set类型选择问题;http://stackoverflow.com/questions/8174667/hibernate-many-to-many-relations-set-or-list 2》hashCode/equals方法问题;http://stackoverflow.com/questions/5031614/the-jpa-hashcode-equals-dilemma