Загруженный список Layz сбрасывается после отсоединения от EntityManager - PullRequest
0 голосов
/ 06 июля 2018

У меня ленивое отношение 1: n от Bp до BpHistorisiert.

Чтобы загрузить Bp, включая BpHistorisiert id do

    Bp bp= entityManager.find(Bp.class, anId);
    bp.getBpHistorisiertList();

Это отлично работает, вызов getBpHistorisiertList() загружает n-сторону лениво, как и ожидалось. Однако, когда bp отсоединяется, список bpHistorisiert в bp явно сбрасывается на 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;

}

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

Благодаря ответу @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

0 голосов
/ 06 июля 2018

Ответ: сообщая о проблеме на трекере проблем OpenJPA и ожидая решения.

Согласно документам , вы не должны наблюдать за поведением, которое вы описали.

...