我正在使用Spring Data + Hibernate,并且有一个包含多个@ManyToOne字段的实体。每个字段都由 hibernate 使用单独的选择查询检索。
我已经尝试过@Fetch(value = FetchMode.JOIN),但没有用,
例子:
@Entity
public class MyEntity{
@Id
private Long id;
@JoinColumn(name = "A")
@Fetch(value = FetchMode.JOIN)
@ManyToOne
private A a;
@ManyToOne
@Fetch(value = FetchMode.JOIN)
@JoinColumn(name = "B")
private B b;
}
Hibernate 将为MyEntity、A和B执行 3 db trips 。
有没有办法通过单选来检索我的实体及其所有字段,其中A和B将被连接。?
编辑:
实体 A 和 B 定义如下:
@Entity
public class A{
@Id
Long id;
String name;
}
存储库看起来像这样(Spring Data 创建实现):
public interface MyEntityRepository extends CrudRepository<MyEntity , Long> {}
加载实体的代码也很简单:
myEntityRepository.findAll();
编辑2:
我刚刚编写了 QueryDSL 查询,并且只执行了 1 次选择。至少我对此很满意。