2017-07-21 45 views
1

隨着使用下面的代碼使用@EmbeddedId和@MapsId原因NULL插入(違反NOT NULL約束)

@Embeddable 
public class EmployeeId implements Serializable { 
    @Column(name = "company_id") 
    private Long companyId; 

    @Column(name = "employee_id") 
    private Long employeeNumber; 
} 

@Entity 
public class Employee { 
    @EmbeddedId 
    private EmployeeId id; 

    private String name; 

    @MapsId("name=companyId") 
    @ManyToOne 
    @JoinColumn(name = "company_id") 
    private Company company; 
} 

當試圖持續存在或合併Employee實體,我們可以看到,作爲嘗試了NULL是插入到company_id字段中。

如何避免插入NULL

回答

0

即使在接線的情況下,創建新對象時(不是從持久性上下文中獲取),company字段仍然爲null

當創建一個新Employee實體,你需要確保你也初始化company屬性:使用find

@Entity 
public class Employee { 
    @EmbeddedId 
    private EmployeeId id; 

    private String name; 

    @MapsId("name=companyId") 
    @ManyToOne 
    @JoinColumn(name = "company_id") 
    private Company company; 

    public Employee() {} 

    public Employee(int id,String name,Company company) { 
     this.name = name; 
     this.id = new EmployeeId(id,company.id); 
     this.company = company; 
    } 
} 

你可能會從持久化上下文獲得的Company實體。你也可以使用它的構造函數從頭開始創建它。