本文共 4410 字,大约阅读时间需要 14 分钟。
下午弄了很久,看了别人的教程。配置出来要么就是数据库不符合多对多的关系,要么就是根本不符合逻辑。
后来找到别人的教程的例子,虽然表建立正确了,但是关系只能有一方控制,这可麻烦的很呢。比如:
以前在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;
- @Table
- @Entity
- @SuppressWarnings("serial")
- public class Role implements Serializable {
- private Long 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;
- @Table
- @Entity
- @SuppressWarnings("serial")
- public class Staff implements Serializable {
- private Long id;
- private Date createDate;
- private Date modifyDate;
- private String loginId;
- 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;
- }
-
- }
转载地址:http://lcini.baihongyu.com/