2016-08-21 3 views
1

Я пытался с этим:Spring Data JPA - Ленивый режим выборки не работает @OneToOne

@OneToOne(mappedBy = "user", fetch = FetchType.LAZY) 
private UserInfo userInfo; 

Но приведенный выше код не принести лениво.

А также попытался с помощью следующего кода:

@Entity 
@NamedEntityGraph(name = "User.detail", attributeNodes = {}) 
public class User extends AbstractEntity { 

    @Enumerated(EnumType.ORDINAL) 
    @Column(name = "country", nullable = false) 
    private Country country; 

    @Column(name = "mobile_no", nullable = false) 
    private String mobileNo; 

    @Column(name = "password", nullable = false) 
    private String password; 

    @OneToOne(mappedBy = "user", fetch = FetchType.LAZY) 
    private UserInfo userInfo; 

    // Getter & setter 
} 

@Repository 
public interface UserRepository extends JpaRepository<User, Long> { 

    @EntityGraph(value = "User.detail", type = EntityGraphType.FETCH) 
    User findById(Long id); 
} 

Это тоже не работает.

Может ли кто-нибудь мне помочь?

+3

У каждого пользователя есть Пользовательская информация? Если это так, вы должны пометить ассоциацию как необязательную = false. В противном случае Hibernate не имеет понятия, должно ли оно установить значение null или прокси, и, следовательно, заставить проверить, существует ли UserInfo для пользователя. –

+1

http://stackoverflow.com/questions/1444227/making-a-onetoone-relation-lazy –

+0

@jbnizet, я пробовал использовать optional = false, но он не работает. Я также пробовал с @LazyToOne (значение = LazyToOneOption.PROXY), но все еще не работает. –

ответ

1

В соответствии с JPA 2.1 (JSR 338) спецификации, раздел 11.1.41 значение FetchType.LAZY для параметра fetch лишь намек:

ли должны быть загружены лениво ассоциация или должна быть охотно извлекается. Стратегия EAGER является обязательным требованием для среды выполнения поставщика непрерывности, которая должна быть унаследована от связанного объекта .. Стратегия LAZY- это подсказка для среды выполнения поставщика.

Так что если ассоциация с нетерпением вызвана, это не означает, что доза не работает (как указано).

Возможное решение проблемы может быть связано с удалением private UserInfo userInfo; с вашего сопоставления объектов и добавлением fetchUserInfo(Long userId) в ваш UserRepository.

Смежные вопросы