注解多对多操作

1 篇文章 0 订阅
1 篇文章 0 订阅
package com.cserver.core.domain;
import java.util.List;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

@Entity
@Table(name = "SYS_MENU")
@SuppressWarnings("serial")
public class SysMenu implements java.io.Serializable {

	private Long oid;
	/**
	 * 父类id
	 */
	private SysMenu parentMenu;
	/**
	 *子类id
	 */
	private List<SysMenu> childMenu;
	/**
	 * 菜单名ch
	 */
	@Column(name = "MENUNAME", length = 40)
	private String menuName;

	/**
	 * 菜单名
	 */
	@Column(name = "MENUENNAME", length = 36)
	private String menuEnName;
	/**
	 * 角色
	 */
	private Set<SysRole> sysRoles;
	/**
	 * 菜单连接
	 */
	@Column(name = "MENUURL", length = 255)
	private String menuUrl;
	/***
	 * 排序字段
	 */
	@Column(name = "SORTNUM", precision = 4, scale = 0)
	private Long sortnum;
	/**
	 * 级别
	 */
	@Column(name="menuLevel", precision = 4, scale = 0)
	private Long menuLevel;
	/**
	 * 添加人
	 */
	@Column(name="usercode", length = 40)
	private String usercode;
	/**
	 * 创建时间
	 */
	@Column(name="createDate", length = 40)
	private String createDate;
	/**
	 * 描述
	 */
	@Column(name = "menuDescribe", length = 200)
	private String menuDescribe;
	/**
	 * 0:无效
	 * 1:有效 
	 */
	@Column(name="stuats", length = 4)
	private String stuats;
	
	public SysMenu() {}
	
	@Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SM_SYS_SEQ")  
    @SequenceGenerator(name = "SM_SYS_SEQ", sequenceName = "SM_SYS_SEQ", allocationSize = 1)  
    @Column(name = "OID", nullable = false, precision = 12, scale = 0)
	public Long getOid() {
		return this.oid;
	}
	public void setOid(Long oid) {
		this.oid = oid;
	}
	
	/**
	 * PERSIST 级联添加
	 * MERGE 级联修改
	 * REFRESH 
	 * REMOVE 级联删除
	 * @return
	 */
	@ManyToOne(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
	@JoinColumn(name = "parent_oid")
	@NotFound(action=NotFoundAction.IGNORE)
	public SysMenu getParentMenu() {
		return parentMenu;
	}
	public void setParentMenu(SysMenu parentMenu) {
		this.parentMenu = parentMenu;
	}

	@OneToMany(mappedBy="parentMenu", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	@NotFound(action=NotFoundAction.IGNORE)
	public List<SysMenu> getChildMenu() {
		return childMenu;
	}
	public void setChildMenu(List<SysMenu> childMenu) {
		this.childMenu = childMenu;
	}
	
	/** 
	 * @ManyToMany 注释表示Student是多对多关系的一边
	 * mappedBy 属性定义了SysMenu 为双向关系的维护端 
	 */
	@ManyToMany(mappedBy="menus", cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},fetch=FetchType.LAZY)
	@NotFound(action=NotFoundAction.IGNORE)
	public  Set<SysRole>  getSysRoles() {
		return sysRoles;
	}
	public void setSysRoles( Set<SysRole>  sysRoles) {
		this.sysRoles = sysRoles;
	}
	
	public String getMenuName() {
		return menuName;
	}
	public void setMenuName(String menuName) {
		this.menuName = menuName;
	}
	public String getMenuEnName() {
		return menuEnName;
	}
	public void setMenuEnName(String menuEnName) {
		this.menuEnName = menuEnName;
	}
	public String getMenuUrl() {
		return menuUrl;
	}
	public void setMenuUrl(String menuUrl) {
		this.menuUrl = menuUrl;
	}
	public Long getSortnum() {
		return sortnum;
	}
	public void setSortnum(Long sortnum) {
		this.sortnum = sortnum;
	}
	public Long getMenuLevel() {
		return menuLevel;
	}
	public void setMenuLevel(Long menuLevel) {
		this.menuLevel = menuLevel;
	}
	public String getUsercode() {
		return usercode;
	}
	public void setUsercode(String usercode) {
		this.usercode = usercode;
	}
	public String getCreateDate() {
		return createDate;
	}
	public void setCreateDate(String createDate) {
		this.createDate = createDate;
	}
	public String getStuats() {
		return stuats;
	}
	public void setStuats(String stuats) {
		this.stuats = stuats;
	}
	public String getMenuDescribe() {
		return menuDescribe;
	}
	public void setMenuDescribe(String menuDescribe) {
		this.menuDescribe = menuDescribe;
	}	
}
package com.cserver.core.domain;

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

@Entity
@Table(name = "SYS_ROLE")
@SuppressWarnings("serial")
public class SysRole implements java.io.Serializable{
	
	private Long oid;
	/** 角色名称 */
	private String roleName;
	/**
	 * 0:未启用
	 * 1:启用
	 */
	private String stuats;
	/** 添加人 */
	private String usercode;
	/** 创建时间  */
	private String createDate;
	/** 描述 */
	private String describe;
	/** 特殊角色标识 */
	private String constants;
	/** 菜单 */
	private Set<SysMenu> menus;
	/** 用户 */
	private Set<SysUser> sysUsers;
	
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SM_SYS_SEQ")  
    @SequenceGenerator(name = "SM_SYS_SEQ", sequenceName = "SM_SYS_SEQ", allocationSize = 1)  
    @Column(name = "OID", nullable = false, precision = 22, scale = 0)
	public Long getOid() {
		return this.oid;
	}
	public void setOid(Long oid) {
		this.oid = oid;
	}
	/** 特殊角色标识 */
	@Column(name="constants", length = 200)
	public String getConstants() {
		return constants;
	}
	/** 特殊角色标识 */
	public void setConstants(String constants) {
		this.constants = constants;
	}

	/** 添加人 */
	@Column(name="usercode", length = 20)
	public String getUsercode() {
		return usercode;
	}
	/** 添加人 */
	public void setUsercode(String usercode) {
		this.usercode = usercode;
	}

	/** 创建时间  */
	@Column(name="createDate", length = 40)
	public String getCreateDate() {
		return createDate;
	}
	/** 创建时间  */
	public void setCreateDate(String createDate) {
		this.createDate =createDate;
	}

	/**
	 * 0:未启用
	 * 1:启用
	 */
	@Column(name="stuats", length = 40)
	public String getStuats() {
		return stuats;
	}
	/**
	 * 0:未启用
	 * 1:启用
	 */
	public void setStuats(String stuats) {
		this.stuats = stuats;
	}
	/*  
     * @ManyToMany 注释表示SysRole 是多对多关系的一端。  
     * @JoinTable 描述了多对多关系的数据表关系,name属性指定中间表名称。  
     * joinColumns 定义中间表与SysRole 表的外键关系,中间表SYS_ROLE_MENU的roleOid 列是SysRole 表的主键列对应的外键列。  
     * inverseJoinColumns 属性定义了中间表与另外一端(SysMenu)的外键关系。  
     */
	@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
	@JoinTable(name="SYS_ROLE_MENU",joinColumns={@JoinColumn(name="roleOid",referencedColumnName="oid")},
			inverseJoinColumns={@JoinColumn(name="menuOid",referencedColumnName="oid")})
	@NotFound(action=NotFoundAction.IGNORE)
	public Set<SysMenu> getMenus() {
		return menus;
	}
	public void setMenus(Set<SysMenu> menus) {
		this.menus = menus;
	}
	
	/*  
     * @ManyToMany 注释表示SysRole 是多对多关系的一端。  
     * @JoinTable 描述了多对多关系的数据表关系,name属性指定中间表名称。  
     * joinColumns 定义中间表与SysRole 表的外键关系,中间表SYS_ROLE_USER的roleOid 列是SysRole 表的主键列对应的外键列。  
     * inverseJoinColumns 属性定义了中间表与另外一端(SysUser)的外键关系。  
     */
	@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
	@JoinTable(name="SYS_ROLE_USER",joinColumns={@JoinColumn(name="roleOid",referencedColumnName="oid")},
			inverseJoinColumns={@JoinColumn(name="userOid",referencedColumnName="oid")})
	@NotFound(action=NotFoundAction.IGNORE)
	public  Set<SysUser>  getSysUsers() {
		return sysUsers;
	}
	public void setSysUsers( Set<SysUser>  sysUsers) {
		this.sysUsers = sysUsers;
	}
	
	@Column(name = "ROLENAME", nullable = false)
	public String getRoleName() {
		return roleName;
	}
	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	@Column(name = "ROLEDESCRIBE", length = 300)
	public String getDescribe() {
		return describe;
	}
	public void setDescribe(String describe) {
		this.describe = describe;
	}
	
}


保存关联:

	/**
	 * 关联菜单到角色
	 * @param sysRole
	 * @param menuOids
	 * @throws Exception
	 */
	public void linkRoleToMenus(SysRole sysRole,String menuOids)throws Exception{
		sysRole = this.findRoleByOid(sysRole.getOid());
		Set<SysMenu> menus = new HashSet<SysMenu>();
		try {
			if (StringUtils.isNotEmpty(menuOids)) {
				String[] s = menuOids.split(",");
				for (String oid : s) {
					SysMenu menu = (SysMenu) genericDAO.getObject(SysMenu.class, Long.parseLong(oid));
					if (menu != null) {
						menus.add(menu);
					}
				}
			}
			sysRole.setMenus(menus);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		genericDAO.updateObject(sysRole);
	}



注:在@ManyToMany的选项中mappedBy放置到另一方则两者关系保存不到中间表中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值