关于hibernate的many to many(由one to many 与 many to one组成) 关系
例如, 用户(User),角色(Role),以及用户—角色表(UserRole)这三张表
具体的po对应如下:
package frery;import java.util.HashSet;
import java.util.Set;public class User implements java.io.Serializable { private Integer uid;
private String uname;
private Set userroles = new HashSet(0);
public User() {
} public User(Integer uid) {
this.uid = uid;
}
public User(Integer uid, String uname, Set userroles) {
this.uid = uid;
this.uname = uname;
this.userroles = userroles;
} public Integer getUid() {
return this.uid;
} public void setUid(Integer uid) {
this.uid = uid;
} public String getUname() {
return this.uname;
} public void setUname(String uname) {
this.uname = uname;
} public Set getUserroles() {
return this.userroles;
} public void setUserroles(Set userroles) {
this.userroles = userroles;
}}package frery;import java.util.HashSet;
import java.util.Set;
public class Role implements java.io.Serializable { private Integer rid;
private String rname;
private Set userroles = new HashSet(0);
public Role() {
}
public Role(Integer rid) {
this.rid = rid;
}
public Role(Integer rid, String rname, Set userroles) {
this.rid = rid;
this.rname = rname;
this.userroles = userroles;
}
public Integer getRid() {
return this.rid;
} public void setRid(Integer rid) {
this.rid = rid;
} public String getRname() {
return this.rname;
} public void setRname(String rname) {
this.rname = rname;
} public Set getUserroles() {
return this.userroles;
} public void setUserroles(Set userroles) {
this.userroles = userroles;
}
}package frery;public class Userrole implements java.io.Serializable { private Integer urid;
private Role role;
private User user;
public Userrole() {
} public Userrole(Integer urid) {
this.urid = urid;
}
public Userrole(Integer urid, Role role, User user) {
this.urid = urid;
this.role = role;
this.user = user;
} public Integer getUrid() {
return this.urid;
} public void setUrid(Integer urid) {
this.urid = urid;
} public Role getRole() {
return this.role;
} public void setRole(Role role) {
this.role = role;
} public User getUser() {
return this.user;
} public void setUser(User user) {
this.user = user;
}}我想通过对UserRole的持久化对象进行更新两者的关系
如 User user = userDao.getUserById(1) ;
   Role role = roleDao.getRoleById(2) ;
   Userrole userRole = new Userrole() ; 
   userRole.setUser(user) ;
   userRole.setRole(role) ;
   userroleDao.saveOrUpdate(userRole) ;
   userroleDao.saveOrUpdate(userRole) ;  //在这里我调用了两次saveOrUpdate,如何保证这条重复记录不被插入呢?

解决方案 »

  1.   

    http://topic.csdn.net/u/20091204/16/6c9c1750-0236-4d4a-b94b-e91b9fce3fbb.html第5楼回复
      

  2.   

    为什么要调用两次  一次不就行了吗?? 还有建议最好用Save 不要用SaveOrUpdate
      

  3.   

    回1# : 谢谢您提供的帖子,对我还是有帮助的,但是我现在数据库里的所有的多对多关系都是通过one to many 和many to one组合的,而我现在要做的就是,更新,若没有就插入。不知能否再提供一个策略。
      

  4.   

    用户(User),角色(Role),以及用户—角色表(UserRole)
    这3张表间应该是
    User《——on to many,many to one —》UserRole《-on to many,many to one-》Role的关系。User user = userDao.getUserById(1) ; 
      Role role = roleDao.getRoleById(2) ;
      Userrole userRole = new Userrole() ; 
      userRole.setUser(user) ; 
      userRole.setRole(role) ;
      userroleDao.saveOrUpdate(userRole) ; 
      userroleDao.saveOrUpdate(userRole) ;
    这的这里saveOrUpdate保存的不应该是userRole而应该是user 。
      

  5.   

    谢谢楼上的回答,但是我的User.hbm.xml里面set的inverse="true",我希望让UserRole来维护两者的关系,所以通过saveOrUpdate user不起作用。。
      

  6.   

    使用user来维护吧
    user--userRole:inverse="false"
    userRole--role: userRole="false"从业务上说,你你是加一个用户将相应的角色给他你不是加一个角色然后在连同用户一起加吧
    只要数据改变了,他会级联更新的