JPA学习笔记-EJB-04JPA关联映射总结(2)

时间:2025-02-27

可以看出里面有一个Set<UxRole>,

代表角色实体不能重复,当然判断UxRole是否重复的算法需要在UxRole里自己实现,此为后话暂且不表。

的一个中间桥梁,根据用户找到用户的角色,再根据角色才能找到该用户能使用的操作菜单。并且角色组下的用户和菜单都不能重复。

UxSysMenu(菜单)

其中Set<UxRole>是菜单实体到角色的映射。

4. 实体类代码

有了类图,就有了实体类代码了。

import org.apache.struts2.json.annotations.JSON;

/** * liuyan */ @Entity @Table(name = "ux_admin") public class UxAdmin implements java.io.Serializable { // Fields private Integer id; private String admin; private String password; private Set<UxRole> roles; // Constructors /** default constructor */ public UxAdmin() { } /** minimal constructor */ public UxAdmin(Integer id) { this.id = id; } /** full constructor */ public UxAdmin(Integer id, String admin, String password) { this.id = id; this.admin = admin; this.password = password; } // Property accessors @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) {4 / 23

说明1:不要理睬getRoles()的@JSON(serialize = false)注解,这个和JPA无关 说明2:@ManyToMany(fetch = ZY)注解,说明UxAdmin与UxRole是多对多的关系,采用的是默认的懒加载机制,而且从UxRole来看,是双向的多对多关联。所以必须采用专门的维护关系表来维护多对多关联关系。

说明3:@JoinTable( )注解,利用表名为ux_sys_user_role作为关系维护表。UxAdmin实体表用字段adminId作为ux_sys_user_role的外键,用于维护UxAdmin实体。roleId是维护另一个实体——UxRole的roleId字段。之所以用Set作为集合关联,是因为需求不能让用户的角色重复。inverseJoinColumns是定义指向非所有者主表的外键列。

UxSysMenu

this.smenuname = smenuname; this.iparentid = iparentid; this.isvisible = isvisible; this.ilevel = ilevel; } /** full constructor */ public UxSysMenu(Integer imenuid, String smenuname, String smenuurl, Integer iparentid, Integer iorder, String simgico, String isvisible, Integer ilevel) { this.imenuid = imenuid; this.smenuname = smenuname; this.smenuurl = smenuurl; this.iparentid = iparentid; this.iorder = iorder; this.simgico = simgico; this.isvisible = isvisible; this.ilevel = ilevel; } //去掉双向关联映射,为了更新菜单时不影响角色实体记录 private Set<UxRole> uxRoles; @JSON(serialize = false) @ManyToMany(fetch = ZY) @JoinTable(name = "ux_sys_role_menu", joinColumns = { @JoinColumn(name = "menuId") }, inverseJoinColumns = { @JoinColumn(name = "roleId") }) public Set<UxRole> getUxRoles() { return uxRoles; } public voi

d setUxRoles(Set<UxRole> uxRoles) { this.uxRoles = uxRoles; } // Property accessors @Id @Column(name = "imenuid", unique = true, nullable = false) public Integer getImenuid() { return this.imenuid; }

7 / 23

public void setImenuid(Integer imenuid) { this.imenuid = imenuid; } @Column(name = "smenuname", nullable = false, length = 512) public String getSmenuname() { return this.smenuname; } public void setSmenuname(String smenuname) { this.smenuname = smenuname; } @Column(name = "smenuurl", length = 128) public String getSmenuurl() { return this.smenuurl; } public void setSmenuurl(String smenuurl) { this.smenuurl = smenuurl; } @Column(name = "iparentid", nullable = false) public Integer getIparentid() { return this.iparentid; } public void setIparentid(Integer iparentid) { this.iparentid = iparentid; } @Column(name = "iorder") public Integer getIorder() { return this.iorder; } public void setIorder(Integer iorder) { this.iorder = iorder; } @Column(name = "simgico", length = 64) public String getSimgico() { return this.simgico; }8 / 23

public void setSimgico(String simgico) { this.simgico = simgico; } @Column(name = "isvisible", nullable = false, length = 8) public String getIsvisible() { return this.isvisible; } public void setIsvisible(String isvisible) { this.isvisible = isvisible; } @Column(name = "ilevel", nullable = true) public Integer getIlevel() { return this.ilevel; } public void setIlevel(Integer ilevel) { this.ilevel = ilevel; } /** * 是否主键相等 */ @Override public boolean equals(Object obj) { if(obj instanceof UxSysMenu){ UxSysMenu uxSysMenu = (UxSysMenu)obj; if(uxSysMenu.imenuid == this.imenuid){ return true; } } return false; } @Override public int hashCode() { // TODO Auto-generated method stub return this.imenuid;9 / 23

超级父类Object的equals(Object obj)、hashCode()方法,这样在别的管理实体的Set<UxSysMenu>就可以区分集合中的元素哪些实体是重复的。

下面来看角色实体

UxRole

@ManyToMany(fetch = ZY) @JoinTable(name = "ux_sys_role_menu", joinColumns = { @JoinColumn(name = "roleId") }, inverseJoinColumns = { @JoinColumn(name = "menuId") }) private Set<UxSysMenu> menus;

@ManyToMany(fetch = ZY) @JoinTable(name = "ux_sys_user_role", joinColumns = { @JoinColumn(name = "roleId") }, inverseJoinColumns = { @JoinColumn(name = "adminId") }) private Set<UxAdmin> uxAdmins; // Constructors /** default constructor */ public UxRole() { } /** minimal constructor */ public UxRole(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getRoleName() { return roleName; } public void setRoleName(String roleName) { this.roleName = role …… 此处隐藏:6209字,全部文档内容请下载后查看。喜欢就下载吧 ……

JPA学习笔记-EJB-04JPA关联映射总结(2).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219