【发布时间】:2019-04-28 15:52:28
【问题描述】:
我发现了这个关于实体图的documentation... 阅读后,它让我想到您可以使用实体图仅检索给定实体的@Basic 字段的子集(直到现在,我已经使用实体图快速检索关系,例如,加载一个员工[包括其所有属性]及其相关部门[包括其所有属性])...
所以,我决定用一个小测试来试试这个:
@Entity
@Table(name = "employee")
@NamedEntityGraphs({
@NamedEntityGraph(
name = "OnlyName",
attributeNodes = @NamedAttributeNode(value = "name")
)
})
public class Employee implements Serializable {
...
@Id
@Column(name = "code", updatable = false)
private Long code;
@Basic(fetch = FetchType.LAZY)
@Column(name = "name", nullable = false)
private String name;
@Basic(fetch = FetchType.LAZY)
@Column(name = "last_name", nullable = false)
private String lastName;
@Lob @Basic(fetch = FetchType.LAZY)
@Column(name = "picture", nullable = false)
private byte[] picture;
public Employee() {
super();
}
...
}
然后,为了检索我的实体,我使用了以下代码:
private Employee retrieveFromDatabase(long code) {
EntityGraph<Employee> graph; // Material Entity Graph
Map<String, Object> map = new HashMap<>();
graph = (EntityGraph<Employee>) this.em.createEntityGraph("OnlyName");
map.put("javax.persistence.fetchgraph", graph);
return this.em.find(Employee.class, code, map);
}
现在,这段代码总是返回一个员工,其中包含从数据库中获取的所有字段;甚至 Hibernate 日志也显示了一个选择所有员工字段的查询:
Hibernate: select employee0_.code as code1_0_0_, employee0_.last_name as last_name2_0_0_, employee0_.name as name3_0_0_, employee0_.picture as picture4_0_0_ from employee employee0_ where employee0_.code=?
)
当我期待这样的查询时:select employee0_.code as code1_0_0_, mployee0_.name as name3_0_0_ from employee employee0_ where employee0_.code=?
那么,我做错了什么?这个功能不是Hibernate的supported吗??
注意:为了测试,我使用的是 hibernate 5.0.10 和 wildfly10 ...
谢谢!
【问题讨论】:
标签: java hibernate jpa wildfly jpa-2.1