Layz 加载列表在与 EntityManager 分离时重置
Layz loaded list gets reset upon detach from EntityManager
我有从 Bp
到 BpHistorisiert
的惰性 1:n 关系。
加载一个 Bp
包括相关的 BpHistorisiert
id do
Bp bp= entityManager.find(Bp.class, anId);
bp.getBpHistorisiertList();
这工作正常,对 getBpHistorisiertList()
的调用按预期延迟加载 n 侧。但是,当 bp 分离时,bp 中的 bpHistorisiert 列表明确重置为 null
。我可以在调试器中看到,这是由 OpenJPA EntityManager
.
的分离功能明确完成的
所以我的问题是:当我使用分离的实体时如何加载惰性关系并保持值?
Bp
@Entity
@Table(name = "BP", schema = "INFOP_STAMMDATEN")
public class Bp extends BaseEntity implements EntityId, Serializable {
/** technische ID */
@Id
@Column(name = ID)
private Long id;
@Valid
@OneToMany(mappedBy = "bp", orphanRemoval = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<BpHistorisiert> bpHistorisiertList = new ArrayList<>();
}
BpHistorisiert
@Entity
@Table(name = "BP_HISTORISIERT", schema = "INFOP_STAMMDATEN")
public class BpHistorisiert implements EntityId, GueltigkeitOwner, AbkuerzungOwner, Serializable {
@Id
@Column(name = ID)
private Long id;
@NotNull
@ManyToOne
@JoinColumn(name = BP_ID)
@ForeignKey
private Bp bp;
}
答案是:通过在 OpenJPA 问题跟踪器上报告问题并等待解决。
根据 the docs,您不应观察到您描述的行为。
感谢@crizzis 的回答,我找到了这种行为的原因。我们实际上已经设置
<property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/>
在我们的 persistence.xml
中。结果是,所有实体的所有惰性字段都设置为分离时的 java 默认值。对于懒惰的 List
这是 null
.
所以是的,这是一个 OpenJPA 功能,而不是错误。
毕竟这甚至被明确地记录在案:https://issues.apache.org/jira/browse/OPENJPA-1913?attachmentSortBy=fileName
我有从 Bp
到 BpHistorisiert
的惰性 1:n 关系。
加载一个 Bp
包括相关的 BpHistorisiert
id do
Bp bp= entityManager.find(Bp.class, anId);
bp.getBpHistorisiertList();
这工作正常,对 getBpHistorisiertList()
的调用按预期延迟加载 n 侧。但是,当 bp 分离时,bp 中的 bpHistorisiert 列表明确重置为 null
。我可以在调试器中看到,这是由 OpenJPA EntityManager
.
所以我的问题是:当我使用分离的实体时如何加载惰性关系并保持值?
Bp
@Entity
@Table(name = "BP", schema = "INFOP_STAMMDATEN")
public class Bp extends BaseEntity implements EntityId, Serializable {
/** technische ID */
@Id
@Column(name = ID)
private Long id;
@Valid
@OneToMany(mappedBy = "bp", orphanRemoval = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<BpHistorisiert> bpHistorisiertList = new ArrayList<>();
}
BpHistorisiert
@Entity
@Table(name = "BP_HISTORISIERT", schema = "INFOP_STAMMDATEN")
public class BpHistorisiert implements EntityId, GueltigkeitOwner, AbkuerzungOwner, Serializable {
@Id
@Column(name = ID)
private Long id;
@NotNull
@ManyToOne
@JoinColumn(name = BP_ID)
@ForeignKey
private Bp bp;
}
答案是:通过在 OpenJPA 问题跟踪器上报告问题并等待解决。
根据 the docs,您不应观察到您描述的行为。
感谢@crizzis 的回答,我找到了这种行为的原因。我们实际上已经设置
<property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/>
在我们的 persistence.xml
中。结果是,所有实体的所有惰性字段都设置为分离时的 java 默认值。对于懒惰的 List
这是 null
.
所以是的,这是一个 OpenJPA 功能,而不是错误。
毕竟这甚至被明确地记录在案:https://issues.apache.org/jira/browse/OPENJPA-1913?attachmentSortBy=fileName