mappedby=?,后面的这个问号跟拥有方,以下是实例。
Role.java
package com.nbg.nuskin.oa.domain;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
/**
*
*
* @author Administrator
*
*/
@Entity
public class Role {
private long id;
private Set<Privilege> privileges = new HashSet<Privilege>();
@Id
@GeneratedValue
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
//大家一定要注意这里,没有mappedby,拥有方是属于privilege的
@ManyToMany
public Set<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
}
package com.nbg.nuskin.oa.domain;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
@Entity
public class Privilege {
private Long id;
private Set<Role> roles = new HashSet<Role>();
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
//拥有方是Privilege.java
@ManyToMany(mappedBy = "privileges")
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
下面是RoleAction.java对Role的操作
package com.nbg.nuskin.oa.action; import java.util.HashSet; import java.util.List; import javax.annotation.Resource; import com.nbg.nuskin.oa.domain.Privilege; import com.nbg.nuskin.oa.domain.Role; import com.nbg.nuskin.oa.service.PrivilegeService; import com.nbg.nuskin.oa.service.RoleService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class RoleAction extends ActionSupport implements ModelDriven<Role> { private RoleService roleService; protected Role model = new Role(); public RoleService getRoleService() { return roleService; } @Resource(name = "roleService") public void setRoleService(RoleService roleService) { this.roleService = roleService; } /** * 设置权限 * * @return */ public String setPrivilege() { Role role = roleService.getById(model.getId()); System.out.println(role.getName()+";"+role.getDescription()); List<Privilege> privileges = privilegeService.getByIds(privilegeIds); role.setPrivileges(new HashSet<Privilege>(privileges)); roleService.update(role); return "toList"; } public Long[] getPrivilegeIds() { return privilegeIds; } public void setPrivilegeIds(Long[] privilegeIds) { this.privilegeIds = privilegeIds; } }只有这样设置mappeby,在上面的action中才能够操作相应的privilege
mappedby原理:被拥有方改变,即拥有方主动关联操作关联关系;拥有方改变,不一定操作相关的关联关系
上面的mappedby如果设在roles这边,privileges就不会进行sql的update操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。