通过一次调用从同一个表中获取两个@OneToOne对象

时间:2014-05-13 03:21:13

标签: hibernate jpa

请为以下案例提供一些帮助。

我有两张桌子Trips和Location。 Trip实体与Location表有两个@OneToOne关联。

这将是实体。

@Entity
public class Trip {

 @OneToOne
 private Location fromLocation;

 @OneToOne
 private Location toLocation;
....
}

该实体目前通过存储库方法进行水合,例如:

Trip findById(Long id);

一切正常,但问题是每次旅行都会对Location表进行两次调用。有没有办法将此减少为仅一次调用而不更改数据库结构

我已经尝试在存储库方法的表上使用连接添加本机查询,但由于@OneToOne注释,调用仍然会发生。删除注释并使用备用存储库方法填充位置也不是一种选择,因为在路上我有一个实体

@OneToMany
private List<Trip> trips = new ArrayList<>();

并且需要相同的治疗。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

目前看来,没有。

这是因为你引用了两个不同的对象,由两个不同的PK标识。

您必须编写一个奇怪的自定义查询来查询2个主键,返回两个对象,编写逻辑以分隔fromLocationtoLocation个对象,然后将每个对象设置为各自的Trip中的对象。你可能会考虑更多的开销,而不是让Hibernate运行2个查询并返回整个Trip对象。

如果您对性能非常担心,我建议为这些对象设置二级缓存。试图在一个自定义查询中检索这两个对象,只是Hibernate自身(相对)有效地完成的事情的不必要的复杂化。