EJB3中的多对多关系

2023-12-15 14:48
文章标签 关系 ejb3

本文主要是介绍EJB3中的多对多关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下午弄了很久,看了别人的教程。配置出来要么就是数据库不符合多对多的关系,要么就是根本不符合逻辑。

 

后来找到别人的教程的例子,虽然表建立正确了,但是关系只能有一方控制,这可麻烦的很呢。比如:

 

以前在Hibernate中 知道 默认不配置invser的话 就是双方维护关系,比如 在 一个多对多的关系中A和B

,如果双方都维护关系的话,那么不管删除A还是删除B ,都可以同时删除它们之间对应的关系。


但是在EJB3中,却不能这样做,mappedBy配置在A段的话,那么就是B来维护关系了。那么如果A和B之间存在5个个关联的关系 ,当删除A的时候A和B的关系就还存在,这些关系是垃圾数据,A都不存在了还要A和B的关系干嘛?。这样是不是EJB3中的一个BUG???

或者高手给出一个好点的方案 最近爱上了EJB3 ,同时拥有的回调方法和方法拦截尤其让我更是欢喜,不会因为这些让我不爽吧。

 

现在这样类配置: 直接贴代码了。2个类

 

  1. /**
  2.  * 
  3.  */
  4. package com.tsts.oa.bean;
  5. import java.io.Serializable;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.List;
  9. import javax.persistence.CascadeType;
  10. import javax.persistence.Column;
  11. import javax.persistence.Entity;
  12. import javax.persistence.FetchType;
  13. import javax.persistence.GeneratedValue;
  14. import javax.persistence.GenerationType;
  15. import javax.persistence.Id;
  16. import javax.persistence.JoinColumn;
  17. import javax.persistence.JoinTable;
  18. import javax.persistence.ManyToMany;
  19. import javax.persistence.Table;
  20. /**
  21.  * @author sunyanan
  22.  * 
  23.  */
  24. @Table
  25. @Entity
  26. @SuppressWarnings("serial")
  27. public class Role implements Serializable {
  28.     private Long id; // 对象ID
  29.     private Date createDate; // 对象创建日期
  30.     private Date modifyDate; // 对象修改日期
  31.     private String roleName; // 角色名称
  32.     
  33.     private List<Staff> roleStaff = new ArrayList<Staff>(); // 该角色下包含的员工
  34.     @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
  35.     public Long getId() {
  36.         return id;
  37.     }
  38.     public void setId(Long id) {
  39.         this.id = id;
  40.     }
  41.     public Date getCreateDate() {
  42.         return createDate;
  43.     }
  44.     public void setCreateDate(Date createDate) {
  45.         this.createDate = createDate;
  46.     }
  47.     public Date getModifyDate() {
  48.         return modifyDate;
  49.     }
  50.     public void setModifyDate(Date modifyDate) {
  51.         this.modifyDate = modifyDate;
  52.     }
  53.     @Column(length=250)
  54.     public String getRoleName() {
  55.         return roleName;
  56.     }
  57.     public void setRoleName(String roleName) {
  58.         this.roleName = roleName;
  59.     }
  60.     @ManyToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
  61.     @JoinTable(name="rea_staff_role"
  62.             joinColumns={@JoinColumn(name="role_id")},
  63.             inverseJoinColumns={@JoinColumn(name="staff_id")}
  64.         )
  65.     public List<Staff> getRoleStaff() {
  66.         return roleStaff;
  67.     }
  68.     public void setRoleStaff(List<Staff> roleStaff) {
  69.         this.roleStaff = roleStaff;
  70.     }
  71. }
  1. /**
  2.  * 
  3.  */
  4. package com.tsts.oa.bean;
  5. import java.io.Serializable;
  6. import java.util.ArrayList;
  7. import java.util.Date;
  8. import java.util.List;
  9. import javax.persistence.CascadeType;
  10. import javax.persistence.Column;
  11. import javax.persistence.Entity;
  12. import javax.persistence.FetchType;
  13. import javax.persistence.GeneratedValue;
  14. import javax.persistence.GenerationType;
  15. import javax.persistence.Id;
  16. import javax.persistence.JoinColumn;
  17. import javax.persistence.JoinTable;
  18. import javax.persistence.ManyToMany;
  19. import javax.persistence.Table;
  20. /**
  21.  * @author sunyanan
  22.  * 
  23.  * 员工实体类
  24.  * 
  25.  */
  26. @Table
  27. @Entity
  28. @SuppressWarnings("serial")
  29. public class Staff implements Serializable {
  30.     private Long id; // 记录id
  31.     private Date createDate; // 对象创建日期
  32.     private Date modifyDate; // 对象修改日期
  33.     private String loginId; // 登录id
  34.     private String name; // 真实名字
  35.     private String password; // 密码
  36.     private String email; // 邮箱
  37.     private char sex; // 性别
  38.     
  39.     private List<Role> staffRole = new ArrayList<Role>(); // 该员工所拥有的角色组
  40.     @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
  41.     public Long getId() {
  42.         return id;
  43.     }
  44.     public void setId(Long id) {
  45.         this.id = id;
  46.     }
  47.     @Column(length=50)
  48.     public String getLoginId() {
  49.         return loginId;
  50.     }
  51.     public void setLoginId(String loginId) {
  52.         this.loginId = loginId;
  53.     }
  54.     @Column(length=50)
  55.     public String getName() {
  56.         return name;
  57.     }
  58.     public void setName(String name) {
  59.         this.name = name;
  60.     }
  61.     @Column(length=50)
  62.     public String getPassword() {
  63.         return password;
  64.     }
  65.     public void setPassword(String password) {
  66.         this.password = password;
  67.     }
  68.     @Column(length=50)
  69.     public String getEmail() {
  70.         return email;
  71.     }
  72.     public void setEmail(String email) {
  73.         this.email = email;
  74.     }
  75.     @Column(length=2)
  76.     public char getSex() {
  77.         return sex;
  78.     }
  79.     public void setSex(char sex) {
  80.         this.sex = sex;
  81.     }
  82.     public Date getCreateDate() {
  83.         return createDate;
  84.     }
  85.     public void setCreateDate(Date createDate) {
  86.         this.createDate = createDate;
  87.     }
  88.     public Date getModifyDate() {
  89.         return modifyDate;
  90.     }
  91.     public void setModifyDate(Date modifyDate) {
  92.         this.modifyDate = modifyDate;
  93.     }
  94.     @ManyToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
  95.     @JoinTable(name="rea_staff_role"
  96.             joinColumns={@JoinColumn(name="staff_id")},
  97.             inverseJoinColumns={@JoinColumn(name="role_id")}
  98.         )
  99.     public List<Role> getStaffRole() {
  100.         return staffRole;
  101.     }
  102.     public void setStaffRole(List<Role> staffRole) {
  103.         this.staffRole = staffRole;
  104.     }
  105.     
  106. }

 

 

 

这篇关于EJB3中的多对多关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496832

相关文章

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

读软件设计的要素04概念的关系

1. 概念的关系 1.1. 概念是独立的,彼此间无须相互依赖 1.1.1. 一个概念是应该独立地被理解、设计和实现的 1.1.2. 独立性是概念的简单性和可重用性的关键 1.2. 软件存在依赖性 1.2.1. 不是说一个概念需要依赖另一个概念才能正确运行 1.2.2. 只有当一个概念存在时,包含另一个概念才有意义 1.3. 概念依赖关系图简要概括了软件的概念和概念存在的理

数据依赖基础入门:函数依赖与数据库设计的关系

在数据库设计中,数据依赖 是一个重要的概念,它直接影响到数据库的结构和性能。函数依赖 作为数据依赖的一种,是规范化理论的基础,对数据库设计起着至关重要的作用。如果你是一名数据库设计的初学者,这篇文章将帮助你理解函数依赖及其在数据库设计中的应用。 什么是数据依赖? 数据依赖 是指同一关系中属性间的相互依赖和制约关系,它是数据库设计中语义的体现。在现实世界中,数据之间往往存在某种依赖关系,而这

c++ 和C语言的兼容性关系

C++ 和 C 语言有很高的兼容性,但也存在一些差异和限制。下面是它们的兼容性关系的详细介绍: 兼容性 C++ 是 C 的超集: C++ 语言设计为兼容 C 语言的语法和功能,大部分 C 代码可以在 C++ 编译器中编译运行。 标准库兼容性: C++ 标准库包含了 C 标准库的内容,如 stdio.h、stdlib.h、string.h 等头文件,但 C++ 的标准库也提供了额外的功能,如

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序

file-max与ulimit的关系与差别

http://zhangxugg-163-com.iteye.com/blog/1108402 http://ilikedo.iteye.com/blog/1554822

【编程底层原理】方法区、永久代和元空间之间的关系

Java虚拟机(JVM)中的内存布局经历了几个版本的变更,其中方法区、永久代和元空间是这些变更中的关键概念。以下是它们之间的关系: 一、方法区: 1、方法区是JVM规范中定义的一个概念,它用于存储类信息、常量、静态变量、即时编译器编译后的代码等数据。 3、它是JVM运行时数据区的一部分,与堆内存一样,是所有线程共享的内存区域。 二、永久代(PermGen): 1、在Java SE 7之前,

笔记整理—内核!启动!—kernel部分(1)驱动与内核的关系

首先,恭喜完成了uboot部分的内容整理,其次补充一点,uboot第一部分和第二部分的工作不是一定的,在不同的版本中,可能这个初始化早一点,那个的又放在了第二部分,版本不同,造成的工作顺序不同,但终归是要完成基本内容初始化并传参给kernel的。         那么至于驱动与内核的关系,用一张图来说明最适合不过:         驱动位于OS层的中下层与硬件相接。驱动是内

一、关系模型和关系代数,《数据库系统概念》,原书第7版

文章目录 @[toc]一、引言1.1 什么是数据库1.2 数据完整性1.3 数据库的操作1.4 数据库的持久性1.5 数据库管理系统1.6 数据模型1.7 早期DBMS 二、关系模型2.1 什么是关系模型2.2 关系数据库的结构2.3 键2.4 约束2.5 数据操纵语言(DML)2.6 关系代数2.6.1 选择运算2.6.2 投影运算2.6.3 合并运算2.6.4 交运算2.6.5 差运算2.