JPA 2, выборка один к одному = FetchType.EAGER не работает - PullRequest
2 голосов
/ 01 апреля 2011

В моей сущности UserTbl у меня есть это

@OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER )
private RetailPostUserTbl retailPostUser;

@OneToOne( cascade = CascadeType.REMOVE, mappedBy = "user", fetch=FetchType.EAGER )
private BackOfficeUserTbl backOfficeUser;

Но оба они ВСЕГДА нулевые.

Пользователь должен принадлежать хотя бы одному из них или обоим, но запрос всегда возвращает нулевое.

Я пытался получить его с помощью критериев API, как это

    Root<UserTbl> root = cq.from( UserTbl.class );
    root.fetch( UserTbl_.retailPostUser, JoinType.LEFT );
    root.fetch( UserTbl_.backOfficeUser, JoinType.LEFT );

Но они по-прежнему всегда нулевые.

Есть идеи, почему это не работает?

Реверс работает нормально, например,

в RetailPostUserTbl, это работает

@OneToOne( optional = false, cascade=CascadeType.REMOVE )
@PrimaryKeyJoinColumn
private UserTbl user;

1 Ответ

2 голосов
/ 01 апреля 2011

Вы, должно быть, делаете что-то не так при сохранении или извлечении сущности, поскольку для @OneToOne сопоставления FetchType по умолчанию используется EAGER, и вам не нужно явно указывать это. Вы пытались загрузить объект по -

entityManager.find();

Если вышеуказанный метод работает и возвращает сущность со всеми сопоставленными объектами, проверьте запрос критерия.

...