Spring Data Jpa - 懒惰提取模式不适用于@OneToOne

时间:2016-08-21 06:41:09

标签: java spring hibernate jpa spring-data-jpa

我试过这个:

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

这也行不通。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

根据JPA 2.1(JSR 338)规范,第11.1.41节,参数FetchType.LAZY的值fetch只是一个提示:

  

协会是否应该延迟加载或者必须急切地获取。该   EAGER策略是持久性提供程序运行时的要求,必须急切地提取关联实体 LAZY策略是持久性提供程序运行时的提示

因此,如果急切地提取关联,则并不意味着FetchType.LAZY不起作用(如指定的那样)。

问题的可能解决方案可能是从实体映射中移除private UserInfo userInfo;并向fetchUserInfo(Long userId)添加UserRepository