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;
}
}
Privilege.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.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操作。
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
NULL 博文链接:https://605113068.iteye.com/blog/1727088
利用Memory Mapped File实践A,B跨程序的数据交换
MemoryMappedFile 使用 C# 内存中分配一大块地址. 前边分配一个用与共同配置用 后边N个结构体 for循环建 一般用到此问题,两本程序 一个读一个写 循环读写 ----2015/09/24 Lyndon 上海----
Memory-Mapped Files for Qualcomm Brew By Ray Rischpater
基于.NET4.0的MemoryMappedFile实现共享内存通信 共享内存通信可以解决跨线程、跨进程、跨EXE之间通信的问题 对于需要传输图片等引用类数据,可以通过序列化和反序列化配合共享内存实现跨进程(跨EXE)通信 共享...
mappedBy属性用法: 该属性与关联关系的维护权相关。 该属性应放在放弃维护权一方。 该属性值为对方的关联属性,表明以后的关联关系将由它来负责。 使用该属性的注解,无需也不能再设置cascade属性。 ...
MDB: A Memory-Mapped Database and Backend for OpenLDAP
Mapped File Class (4KB)
几乎每一种外设都是通过读写设备上的寄存器来进行...CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。
端口映射工具(附带源码)
Fixed comparing against disconnected mapped network drives to prompt for username/password and reconnect.
对于一对多的双向映射,如果要一对多这一端维护关联关系,你需要删除mappedBy元素并将多对一这端的@JoinColoumn的insertable和updatabel设置为false。这种方案不会得到什么明显的优化,而且还会增加一些附加的UPDATE...
Life After BerkeleyDB- OpenLDAP's Memory-Mapped Database
前几天在网上下载一个struts2的helloword的例子,那个作者也真够缺德的,搞个错误的程序,害得我查了一天的程序错误。 最后发现竟然是struts.xml被写成啦sturts.xml。 碰见这样的问题先鄙视下提供例子的作者, ...
$ npm i --save @nestjs/mapped-types 快速开始 构建功能时,在基本实体类型上构建变体通常很有用。 这种变体的一个很好的例子是数据传输对象(DTO)。 数据传输对象是用于封装数据并将其从应用程序的一部分发送到...
所有者是Book类,我们没有在所有者类中放置mappedBy (在这里我们犯了一个错误)作者实体类与book类相关-在这里,它必须是mappedBy并指向另一侧的集合,可以正常工作。 请测试代码并查看测试,我建议您@JoinColumn...
MemoryMappedFiles4Java 描述 该库旨在将内存映射文件引入Java。 与已经存在的MappedByteBuffer相比,目标是更好地控制创建,修改和销毁。 它试图统一在不同操作系统上使用此类映射的接口,这意味着许多细节无法实现...
Mapped_Store
go-mapped-csv 类似于stdlib的encoding / csv,不同之处在于它根据传递的列编写映射。 查看。 执照 麻省理工学院