默认为spring数据jpa中的子实体加入fetch

时间:2016-12-09 02:04:56

标签: hibernate jpa spring-data spring-data-jpa

我正在使用spring数据jpa和hibernate。

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

有没有办法指示spring数据jpa在可能的情况下总是使用连接?

实施例。实体:

@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;
}

子:

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

   @ManyToOne
   @JoinColumn(name="parentId", referencedColumnName="parentId")
   private Parent parent;
}

1 个答案:

答案 0 :(得分:1)

子关系的获取类型被指定为Lazy。这指示不加载与父实体的关系。尝试Eager获取类型。

如果你想让fetch类型变得懒惰你可以通过在Child(Children?)映射上使用@BatchSize来减少语句数。

<强> UPD:

问题在于获取Child实体时实体图应该有所帮助。声明:

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

使用存储库方法:

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