关于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,如何保证这条重复记录不被插入呢?
例如, 用户(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,如何保证这条重复记录不被插入呢?
这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 。
user--userRole:inverse="false"
userRole--role: userRole="false"从业务上说,你你是加一个用户将相应的角色给他你不是加一个角色然后在连同用户一起加吧
只要数据改变了,他会级联更新的