我正在使用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;
}
答案 0 :(得分:1)
子关系的获取类型被指定为Lazy。这指示不加载与父实体的关系。尝试Eager获取类型。
如果你想让fetch类型变得懒惰你可以通过在Child(Children?)映射上使用@BatchSize来减少语句数。
<强> UPD:强>
问题在于获取Child实体时实体图应该有所帮助。声明:
@NamedEntityGraph(
name = "child.withParent",
attributeNodes = {
@NamedAttributeNode("parent")
}
)
使用存储库方法:
@EntityGraph("child.withParent")
Child findWithParentById(Long id);