hibernate 5.0.10 我定义了一个看起来像这样的子图:
@NamedSubgraph(name = "proc", attributeNodes = {
@NamedAttributeNode("姓名"),
@NamedAttributeNode("childTable1"),
@NamedAttributeNode("childTable2"),
@NamedAttributeNode("childTable3"),
@NamedAttributeNode("childTable4")
}),
问题是,当使用这个子图时,我要取回根表(名称存在的地方)中定义的所有属性,而不仅仅是我指定的子图属性。有没有办法告诉 hibernate 不要获取那些 child ?我的查询看起来就像 select rec from records rec join rec.proc
最佳答案
- 如果您谈论的是基本类型,那么默认情况下,Hibernate 将始终获取它们。启用它的唯一方法是设置
@Basic(fetch=LAZY)
在实体属性上并启用字节码增强。 - 如果您谈论的是 EAGER 关联,那么 Hibernate 无法将它们覆盖为 LAZY,即使 JPA 标准表明应该这样做。
从 JPA 的角度来看,这些策略不是强制性要求,因为 LAZY 只是对 JPA 提供者的提示。
总而言之,JPA 实体图是获取数据的次优方式。避免 FetchType.EAGER
关联、使用子实体和 DTO 投影比实体图好得多。
大多数时候,您甚至不需要获取实体,因为实体只有在您计划修改它们时才有意义。否则,DTO 投影总是更有效。
关于java - 如何限制 Hibernate 实体图中使用的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211312/