A)有点奇怪,而且Hibernate可以做得更好。但是,这是由于这样的事实:
Employee加载急切
EmployeeDetail,并且Hibernate希望避免额外的查询来为每个加载相应的雇员
EmployeeDetail。这样做会做得更好,因为相应的员工已经加载了第一个查询。
如果您在B)中应用我的建议,该信息应该会消失。
B)默认情况下,JPA中渴望一对一关联。使其变得懒惰:
@oneToOne(fetch = FetchType.LAZY)@PrimaryKeyJoinColumnprivate Employee empl;
但是,请记住此处描述的一对一关联的行为。如果Hibernate无法确定是否存在一对一关系的代理对象
null,则无论如何将执行附加查询以检查它。
为了克服这个问题,如果
empl每个参数都是强制性的
EmployeeDetail(并且在您的用例中是必需的,那么没有该员工就不能存在一个员工详细信息),然后在关联映射中进行指示:
@oneToOne(fetch = FetchType.LAZY, optional = false)@PrimaryKeyJoinColumnprivate Employee empl;
这样,
Employee当加载
EmployeeDetail实体实例而
employee根本不查询表时,Hibernate将使代理仅包含id 。



