0

對於實施例其他ID,我有A級與級聯到B:休眠級聯從另一個數據庫

public class A{ 

    private String id; 
    private Set<B> bs = new HashSet<B>(0); 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @COLUMN(name="id" unique = true, nullable = false, length = 28) 
    public void getId(){ 
     return this.id; 
    } 

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "A") 
    @Cascade({CascadeType.SAVE_UPDATE, CascadeType.DELETE, CascadeType.PERSIST}) 
    public void getBs(){ 
     return bs; 
    } 
} 

和我有B,其具有它自己的ID和從A

public class B 

    String id; 
    String aId; 
    A a; 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = "generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @Column(name = "ID", unique = true, nullable = false, length = 28) 
    public String getId() { 
     return this.id; 
    } 

    @Column(name = "A_ID", nullable = false, length = 28) 
    public String getAId() { 
     return aId; 
    } 

    public void setAId(String aId) { 
     this.aId = aId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "A_ID", nullable = false, insertable = false, updatable = false) 
    @MapsId("aId") 
    public Admission getAdmission() { 
     return this.admission; 
    } 

    public void setAdmission(Admission admission) { 
    this.admission = admission; 
    } 
包含ID的列

如何在保存A時自動分配aId?我想要設置一個ID,但是我總是得到一個錯誤,說A_ID不能設置爲空。

謝謝!

回答

1

當使用帶有共享映射的派生標識符時,不僅需要將@MapsId註釋放入關係中,而且還需要將引用關係id的字段與@Id註釋區分開來。

瞭解如何做到這一點(中省略制定者):

public class B { 
    String id; 
    String aId; 
    A a; 

    @Id 
    @GenericGenerator(name = "seq_id", strategy = "generators.SequenceIdGenerator") 
    @GeneratedValue(generator = "seq_id") 
    @Column(name = "ID", unique = true, nullable = false, length = 28) 
    public String getId() { 
     return this.id; 
    } 

    @Id 
    public String getAId() { 
     return aId; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "A_ID", nullable = false) 
    @MapsId("aId") 
    public A getA() { 
     return this.a; 
    } 
} 

對方誤以爲是你註釋你的關係是updatable = falseinsertable = false,使持久性提供忽略這個字段的寫入數據庫。