我有以下實體關係: SIDEA:的EclipseLink 2一對多與一個關聯表如何從一個側刪除
@Entity
@Table(name = "SideA")
public class SideA {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@CascadeOnDelete
@OneToMany(fetch = FetchType.LAZY, mappedBy = "sideA", cascade=CascadeType.ALL)
private List<ABAssociation> association = new ArrayList<ABAssociation>();
}
側B:
@Entity
@Table(name = "SideB")
public class SideB {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@CascadeOnDelete
@OneToMany(fetch = FetchType.LAZY, mappedBy = "sideB", cascade=CascadeType.ALL)
private List<ABAssociation> association = new ArrayList<ABAssociation>();
}
ABAssociation:
@Entity
@Table(name = "ABAssociation")
public class ABAssociation {
@EmbeddedId
private ABAssociationPK pk = new ABAssociationPK();
@ManyToOne(cascade=CascadeType.MERGE)
@MapsId("aId")
private SideA sideA;
@ManyToOne(cascade=CascadeType.MERGE)
@MapsId("bId")
private SideB sideB;
}
ABAssociationPK:
@Embeddable
public class ABAssociationPK implements java.io.Serializable{
private long aId;
private long bId;
}
我的問題是當我刪除一邊時,數據庫刪除ABAssociation中的行,但仍然留在緩存中。
測試碼是像如下:
SideA a = new SideA();
SideB b = new SideB();
entitymanager.persist(a);
entitymanager.persist(b);
ABAssociation ab = new ABAssociation()
ab.setSideA(a);
ab.setSideB(b);
entitymanager.persist(ab);
a.getABAssociationList().add(ab);
b.getABAssociationList().add(ab);
a = entitymanager.merge(a);
b = entitymanager.merge(b);
entitymanager.delete(a);
由於「一」被刪除,之間的「a」和「b」的關係也應該被刪除。 但是當我檢查「b.getABAssociationList()。size()」時,它仍然存在,即使DB中沒有ABAssociation表中的行。
它與共享緩存問題有關嗎?
看一看有關JPA的實施模式這個有趣的博客,解釋發生了什麼事:http://blog.xebia.com/2009/ 03/16/jpa-implementation-patterns-bidirectional-association/ – perissf
我有更糟的情況。我在java se環境下,實體不在同一個entitymanager範圍內。 – Xiwen