我正在使用Spring Boot开发一个相对较大的项目,总的来说,我对此很满意,但是我遇到了一些我认为不应该成为问题的问题。
我有两个实体,User并且UserProfile,例如。他们之间存在一对一的关系,但是大多数时候我只需要User数据,但是数据却可以获取(无论我尝试什么,天哪,我都尝试过每5条Google页面上的世界建议)。
User
UserProfile
因此,我的第一个问题是,是否有一种方法可以在JPA和Spring中延迟获取一对一关系?(因为大多数职位超过2-3年)。
JBuilder
to_json
在Spring,我看到了以下解决方案:
* `Jackson @JsonView` (这不能完全解决我的问题,因为响应不是静态的,并且不能将属性分配给多个视图(据我了解的概念)); * 设置为我不想在响应中使用的空属性(使用此属性,但是我太丑陋,看起来像一个错误的演练); * 或`HashMap`像`.json.jbuilder`在Rails上构建那样进行构建(但是这有时会影响我的性能,因为有时它`for`与构建json的关系如此之多,而且看起来像是一个丑陋的演练)。
我正在寻找某人的某个方向,以至于某天可能遇到了其中一个问题,因为这使我无法解决这个问题,这使我丧命,这在我看来不应该那么难。
编辑1
已经尝试添加optional = false的@OneToOne注释来解决的OneToOne关系的渴望负荷@snovelli建议。例:
optional = false
@OneToOne
@OneToOne(optional=false, fetch = FetchType.LAZY) public UserProfile getUserProfile(){ ... }
如果连接列不在一对一关联中的父级映射到的表中,则关联不能是lazy。原因是JPA提供程序无法确定是否创建代理,以便它可以在以后访问时加载对象或保留null值。
null
即使关联不是可选的,JPA提供程序也必须确定关联实体实例的ID才能将其存储在代理中。因此,它无论如何都必须转到关联的表。
解决方案:
list.get(0)
@PrimaryKeyJoinColumn
@OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "<child id in the view>", insertable = false, updatable = false) private Child child;