本文主要是介绍EJB3中的多对多关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下午弄了很久,看了别人的教程。配置出来要么就是数据库不符合多对多的关系,要么就是根本不符合逻辑。
后来找到别人的教程的例子,虽然表建立正确了,但是关系只能有一方控制,这可麻烦的很呢。比如:
以前在Hibernate中 知道 默认不配置invser的话 就是双方维护关系,比如 在 一个多对多的关系中A和B
,如果双方都维护关系的话,那么不管删除A还是删除B ,都可以同时删除它们之间对应的关系。
但是在EJB3中,却不能这样做,mappedBy配置在A段的话,那么就是B来维护关系了。那么如果A和B之间存在5个个关联的关系 ,当删除A的时候A和B的关系就还存在,这些关系是垃圾数据,A都不存在了还要A和B的关系干嘛?。这样是不是EJB3中的一个BUG???
或者高手给出一个好点的方案 最近爱上了EJB3 ,同时拥有的回调方法和方法拦截尤其让我更是欢喜,不会因为这些让我不爽吧。
现在这样类配置: 直接贴代码了。2个类
- /**
- *
- */
- package com.tsts.oa.bean;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- 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.JoinTable;
- import javax.persistence.ManyToMany;
- import javax.persistence.Table;
- /**
- * @author sunyanan
- *
- */
- @Table
- @Entity
- @SuppressWarnings("serial")
- public class Role implements Serializable {
- private Long id; // 对象ID
- private Date createDate; // 对象创建日期
- private Date modifyDate; // 对象修改日期
- private String roleName; // 角色名称
- private List<Staff> roleStaff = new ArrayList<Staff>(); // 该角色下包含的员工
- @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- public Date getCreateDate() {
- return createDate;
- }
- public void setCreateDate(Date createDate) {
- this.createDate = createDate;
- }
- public Date getModifyDate() {
- return modifyDate;
- }
- public void setModifyDate(Date modifyDate) {
- this.modifyDate = modifyDate;
- }
- @Column(length=250)
- public String getRoleName() {
- return roleName;
- }
- public void setRoleName(String roleName) {
- this.roleName = roleName;
- }
- @ManyToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
- @JoinTable(name="rea_staff_role",
- joinColumns={@JoinColumn(name="role_id")},
- inverseJoinColumns={@JoinColumn(name="staff_id")}
- )
- public List<Staff> getRoleStaff() {
- return roleStaff;
- }
- public void setRoleStaff(List<Staff> roleStaff) {
- this.roleStaff = roleStaff;
- }
- }
- /**
- *
- */
- package com.tsts.oa.bean;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- 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.JoinTable;
- import javax.persistence.ManyToMany;
- import javax.persistence.Table;
- /**
- * @author sunyanan
- *
- * 员工实体类
- *
- */
- @Table
- @Entity
- @SuppressWarnings("serial")
- public class Staff implements Serializable {
- private Long id; // 记录id
- private Date createDate; // 对象创建日期
- private Date modifyDate; // 对象修改日期
- private String loginId; // 登录id
- private String name; // 真实名字
- private String password; // 密码
- private String email; // 邮箱
- private char sex; // 性别
- private List<Role> staffRole = new ArrayList<Role>(); // 该员工所拥有的角色组
- @Id @GeneratedValue(strategy=GenerationType.SEQUENCE)
- public Long getId() {
- return id;
- }
- public void setId(Long id) {
- this.id = id;
- }
- @Column(length=50)
- public String getLoginId() {
- return loginId;
- }
- public void setLoginId(String loginId) {
- this.loginId = loginId;
- }
- @Column(length=50)
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- @Column(length=50)
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Column(length=50)
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- @Column(length=2)
- public char getSex() {
- return sex;
- }
- public void setSex(char sex) {
- this.sex = sex;
- }
- public Date getCreateDate() {
- return createDate;
- }
- public void setCreateDate(Date createDate) {
- this.createDate = createDate;
- }
- public Date getModifyDate() {
- return modifyDate;
- }
- public void setModifyDate(Date modifyDate) {
- this.modifyDate = modifyDate;
- }
- @ManyToMany(cascade=CascadeType.REMOVE, fetch=FetchType.EAGER)
- @JoinTable(name="rea_staff_role",
- joinColumns={@JoinColumn(name="staff_id")},
- inverseJoinColumns={@JoinColumn(name="role_id")}
- )
- public List<Role> getStaffRole() {
- return staffRole;
- }
- public void setStaffRole(List<Role> staffRole) {
- this.staffRole = staffRole;
- }
- }
这篇关于EJB3中的多对多关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!