从EntityManager分离后,Layz加载的列表将重置

时间:2018-07-06 07:55:12

标签: java jpa openjpa

我从for(int i = 0; i < row; i++){ for(int j = 0; j < column; j++){ Text text = new Text("Hello World!"); gridPane.getChildren().add(text); } } Bp的比例为1:n。

要加载包含相关BpHistorisiert ID的Bp

BpHistorisiert

这很好用,对 Bp bp= entityManager.find(Bp.class, anId); bp.getBpHistorisiertList(); 的调用按预期加载了n侧延迟。但是,当bp分离时,bp中的bpHistorisiert列表将明确重置为getBpHistorisiertList()。我可以在调试器中看到,这是由OpenJPA null的分离功能明确完成的。

所以我的问题是:当我使用分离的实体时,如何加载惰性关系并保留值?

Bp

EntityManager

BpHistorisiert

@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<>();

}

2 个答案:

答案 0 :(得分:1)

答案是:通过OpenJPA问题跟踪器报告问题并等待解决。

根据the docs,您不应观察到您描述的行为。

答案 1 :(得分:0)

感谢@crizzis回答,我找到了这种行为的原因。我们实际上已经设置了

<property name="openjpa.DetachState" value="fetch-groups(DetachedStateField=true)"/>

在我们的persistence.xml中。结果是,所有实体的所有惰性文件都在detach时设置为java默认值。对于懒惰的List,这是null

是的,这是OpenJPA功能,而不是bug。

甚至所有这些都被明确记录在案:https://issues.apache.org/jira/browse/OPENJPA-1913?attachmentSortBy=fileName