我正在使用 Spring数据 + 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分贝的旅行。
有没有办法通过单个选择检索我的实体及其所有字段,其中 A 和 B 将加入即可。?
修改
实体A和B的定义如下:
@Entity
public class A{
@Id
Long id;
String name;
}
Repository看起来像这样(Spring Data创建实现):
public interface MyEntityRepository extends CrudRepository<MyEntity , Long> {}
加载实体的代码也非常简单:
myEntityRepository.findAll();
编辑2:
我刚刚编写了QueryDSL查询,因此只执行了1次选择。我至少对此很满意。