Hibernate 通过一次调用从同一个表中获取两个@OneToOne对象
我需要一些关于下列情况的帮助 我有两张桌子,旅行和地点。Trip实体与位置表有两个Hibernate 通过一次调用从同一个表中获取两个@OneToOne对象,hibernate,jpa,Hibernate,Jpa,我需要一些关于下列情况的帮助 我有两张桌子,旅行和地点。Trip实体与位置表有两个@OneToOne关联 这就是实体 @Entity public class Trip { @OneToOne private Location fromLocation; @OneToOne private Location toLocation; .... } 实体目前通过存储库方法水合,例如: Trip findById(Long id); 一切都正常工作,但问题是每次行程都会对位置表进行两次
@OneToOne
关联
这就是实体
@Entity
public class Trip {
@OneToOne
private Location fromLocation;
@OneToOne
private Location toLocation;
....
}
实体目前通过存储库方法水合,例如:
Trip findById(Long id);
一切都正常工作,但问题是每次行程都会对位置表进行两次调用。是否有任何方法可以在不更改数据库结构的情况下将其减少为一次调用
我已经尝试在repository方法的表上放置带有联接的本机查询,但是由于@OneToOne
注释,调用仍然发生。删除注释并使用备用存储库方法填充位置也不是一个选项,因为在这条路上我有一个
@OneToMany
private List<Trip> trips = new ArrayList<>();
@OneToMany
private List trips=new ArrayList();
需要同样的治疗
有什么想法吗?谢谢 就目前情况而言,没有 这是因为您有对两个单独对象的引用,由两个不同的PK标识 您必须编写一个奇怪的自定义查询来查询2个主键,返回两个对象,编写逻辑来分离
fromLocation
和toLocation
对象,然后将每个对象设置为行程中各自的对象。与让Hibernate只运行两个查询并返回整个Trip
对象相比,这样做可能会带来更多的开销
如果您非常担心性能,我建议为这些对象设置二级缓存。尝试在一个自定义查询中检索这两个对象,这只是Hibernate自身(相对而言)足够有效的一些操作的不必要的复杂性。谢谢,但不幸的是,我们需要为此过程更改一些内容。我们最终可能会有400个对位置表的调用(无论是否休眠)有点多。。。