Hibernate 默认为在spring数据jpa中加入子实体的获取

Hibernate 默认为在spring数据jpa中加入子实体的获取,hibernate,jpa,spring-data,spring-data-jpa,Hibernate,Jpa,Spring Data,Spring Data Jpa,我使用的是spring数据jpa和hibernate 当我获取实体时,会发出多个select语句来获取关系 有没有一种方法可以指示SpringDataJPA在可能的情况下始终使用连接 例如,实体: @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Temporal(TemporalType.TIMESTAMP)

我使用的是spring数据jpa和hibernate

当我获取实体时,会发出多个select语句来获取关系

有没有一种方法可以指示SpringDataJPA在可能的情况下始终使用连接

例如,实体:

@Entity
public class Parent {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;

   @Temporal(TemporalType.TIMESTAMP)
   private Date ts;

   @OneToMany(fetch=FetchType.LAZY, mappedBy="parent") 
   private List<Child> child;
}

子关系的获取类型被指定为惰性。指示不加载与父实体的关系。尝试快速获取类型

如果希望fetch类型是惰性的,那么可以通过在Child(Children?)映射上使用@BatchSize来减少语句的数量

Upd:

由于问题是何时提取子实体,实体图应该会有所帮助。声明:

@NamedEntityGraph(
name = "child.withParent",
attributeNodes = {
        @NamedAttributeNode("parent")
}
)

并与存储库方法一起使用:

@EntityGraph("child.withParent")
Child findWithParentById(Long id);

似乎不可能…:-(子字段应该是一个集合?@Argb32是的,问题是当我获取子字段时。有2个选择被发出。1个用于子字段,1个用于父字段。似乎这应该是defaultOk的联接。然后需要另一个解决方案。我已更新了答案。感谢您的回复。我知道NamedEntityGraph,但希望我会这样做不必为每个实体定义NamedEntityGraph,而且SpringDataJPA中有一个默认值,但它似乎不是这样。
@EntityGraph("child.withParent")
Child findWithParentById(Long id);