Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 通过一次调用从同一个表中获取两个@OneToOne对象_Hibernate_Jpa - Fatal编程技术网

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

Hibernate 通过一次调用从同一个表中获取两个@OneToOne对象,hibernate,jpa,Hibernate,Jpa,我需要一些关于下列情况的帮助 我有两张桌子,旅行和地点。Trip实体与位置表有两个@OneToOne关联 这就是实体 @Entity public class Trip { @OneToOne private Location fromLocation; @OneToOne private Location toLocation; .... } 实体目前通过存储库方法水合,例如: Trip findById(Long id); 一切都正常工作,但问题是每次行程都会对位置表进行两次

我需要一些关于下列情况的帮助

我有两张桌子,旅行和地点。Trip实体与位置表有两个
@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个对位置表的调用(无论是否休眠)有点多。。。