我试过这个:
@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);
}
这也行不通。
任何人都可以帮助我吗?
答案 0 :(得分:1)
根据JPA 2.1(JSR 338)规范,第11.1.41节,参数FetchType.LAZY
的值fetch
只是一个提示:
协会是否应该延迟加载或者必须急切地获取。该
EAGER
策略是持久性提供程序运行时的要求,必须急切地提取关联实体 。LAZY
策略是持久性提供程序运行时的提示。
因此,如果急切地提取关联,则并不意味着FetchType.LAZY
不起作用(如指定的那样)。
问题的可能解决方案可能是从实体映射中移除private UserInfo userInfo;
并向fetchUserInfo(Long userId)
添加UserRepository
。