2017-01-18 15 views
0

私は、ソフトウェアと従業員の2つのエンティティをoneToMany関係で持ち、それらは同じレベルにあります。JPA注釈@OneToMany関係別レコード

@Entity(name = "EMPLOYEE") 
public class Employee { 

     private long employeeId; 
     private String firstName; 
     private String lastName; 
     private List<Software> software; 


     @Id //signifies the primary key 
     @Column(name = "EMPLOYEE_ID", nullable = false) 
     @GeneratedValue(strategy = GenerationType.AUTO) 
     public long getEmployeeId() { 
      return employeeId; 
     } 

     public void setEmployeeId(long employeeId) { 
      this.employeeId = employeeId; 
     } 

     @Column(name = "FIRST_NAME", length = 50) 
     public String getFirstName() { 
      return firstName; 
     } 

     public void setFirstName(String firstName) { 
      this.firstName = firstName; 
     } 

     @Column(name = "LAST_NAME", nullable = false,length = 50) 
     public String getLastName() { 
      return lastName; 
     } 

     public void setLastName(String lastName) { 
      this.lastName = lastName; 
     } 

     @OneToMany(
       fetch = FetchType.EAGER, 
       cascade = CascadeType.ALL, 
       orphanRemoval = true, 
       targetEntity = Software.class) 
     @Fetch(FetchMode.SUBSELECT) 
     public List<Software> getSoftware() { 
      return software; 
     } 

     public void setSoftware(Software software) { 
      this.software = software; 
     } 
} 

Software.class

@Entity(name = "SOFTWARE") 
public class SOFTWARE { 

    private long softwareId; 
    private String softwareName; 
    private String version; 
    private Employee emp; 

    @Id 
    @Column(name = "SOFTWARE_ID", nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    public long getSoftwareId() { 
     return softwareId; 
    } 

    public void setSoftwareId(long softwareId) { 
     this.softwareId = softwareId; 
    } 

    @Column(name = "SOFTWARE_NAME") 
    public String getSoftwareName() { 
     return softwareName; 
    } 

    public void setSoftwareName(String name) { 
     this.name = name; 
    } 

    @Column(name = "SOFTWARE_VERSION") 
    public String getSoftwareVersion() { 
     return softwareDesc; 
    } 

    public void setSoftwareVersion(String version) { 
     this.version = version; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "EMPLOYEE_ID", nullable = true) 
    public String getEmployee() { 
     return emp; 
    } 

    public void setEmployee(Employee emp) { 
     this.emp = emp; 
    } 
} 

アイデアは、レコードは、削除された追加され、各従業員に割り当てることができるソフトウェアのリストと、GUIを持つことです。私の場合は

enter image description here

私はEMPLOYEE_IDのみが異なる重複したソフトウェアのレコードを持っています。問題は、私はすべてのレコードに影響しないレコードを編集し、関係を削除した場合、それが削除された場合、このソフトウェアを他の従業員に割り当てることができなかったため、レコード自体を削除したくないということです。

これは正しい方法ですか、3番目のテーブルを作成して@JoinTableで解決できる問題ですか? 誰かがアイデアを持っていますか?

+0

CascadeType.ALLは使用しないでください。 – Mehdi

答えて

1

CascadeType.ALLを使用しないでください。これには、従業員を削除すると関連するソフトウェアレコードも削除されるという影響で削除操作をカスケードすることが含まれます。私はカスケードしないで始めます。

関連する問題