从其他集合中删除相同的实体时更新集合

时间:2013-04-18 18:21:06

标签: jpa-2.0

我有4个类实体:CtPersonaFirma,CtFirmaDocumento和CtContrato。一个人可以签署多份合同,合同可以由多人签署。

CtPersonaFirma:包含有权签名的人。

CtContrato:包含合同

CtFirmaDocumento:上面两个表之间的关系。

当我删除一个人CtPersonaFirma表进行级联删除时,CtFirmaDocumento表中有人被删除的引用,但是在集合ctFirmaDocumentoCollection中实体CtContrato没有更新。

public class CtContrato implements Serializable {
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_contrato")
private Integer idContrato;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ctContrato", fetch=FetchType.LAZY)
private Collection<CtFirmaDocumento> ctFirmaDocumentoCollection;


public class CtPersonaFirma implements Serializable {
@Id
@Basic(optional = false)
@NotNull
@Column(name = "id_persona")
private Integer idPersona;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ctPersonaFirma")
private Collection<CtFirmaDocumento> ctFirmaDocumentoCollection;

public class CtFirmaDocumento implements Serializable {
@EmbeddedId
protected CtFirmaDocumentoPK ctFirmaDocumentoPK;
@JoinColumn(name = "id_persona_ref", referencedColumnName = "id_persona", insertable = false, updatable = false)
@ManyToOne(optional = false)
private CtPersonaFirma ctPersonaFirma;
@JoinColumn(name = "id_contrato", referencedColumnName = "id_contrato", insertable = false, updatable = false)
@ManyToOne(optional = false)
private CtContrato ctContrato;

1 个答案:

答案 0 :(得分:0)

JPA要求应用程序维护双向关系的双方。当您对一方进行更改时,JPA将不会为您维护另一方,并且您的缓存实体将与数据库中的内容不同步。根据您更改的哪一方,这些更改可能不会在数据库中保留。

在这种情况下,当您删除CtFirmaDocumento对象时,您还应该删除可能引用它的任何CtContrato中对这些对象的所有引用。

在这种情况下,另一种方法是在刷新或提交更改后强制刷新任何CtContrato对象,但通常最好直接修复引用以避免以后出现此关系的问题。