我有一个实体,里面有很多属性和关系。在某些情况下,我只需要 2 个简单的属性,而不是其余的。我尝试使用实体图,但我总是得到完整的条目,包括所有属性、关系......
我的 EECase 实体中的实体图:
@NamedQueries({
@NamedQuery(name = EECase.QUERY_ALLCASES, query = "SELECT DISTINCT c FROM EECase c")
})
@NamedEntityGraph(name = "Case.forDropdown", attributeNodes = {
@NamedAttributeNode("caseNumber"),
@NamedAttributeNode("firstNames"),
@NamedAttributeNode("lastName")
})
在我的 bean 中,我尝试使用以下方法获取过滤后的案例:
public List<EECase> getCasesForDropdown() {
TypedQuery<EECase> query = getManager().createNamedQuery(EECase.QUERY_ALLCASES, EECase.class);
EntityGraph<EECase> graph = (EntityGraph<EECase>) getManager().getEntityGraph("Case.forDropdown");
query.setHint("javax.persistence.fetchgraph", graph);
List<EECase> queryEntity = (List<EECase>) query.getResultList();
return queryEntity;
}
似乎 setHint 被忽略了?
最佳答案
即使您定义了提示,它仍然是一个可选的东西。
我建议在选择中以结果类的形式作为投影(如果您不打算随后更新实体,则建议选择该选项):
@NamedQueries({
@NamedQuery(name = EECase.QUERY_ALLCASES
, query = "SELECT new com.domain.EECase(c.caseNumber, c.firstName, c.lastName)
FROM EECase c")
})
请记住放置一个适当的构造函数来按给定顺序接受投影的列。
您还可以使用单独的 POJO 来映射该查询的结果。不一定是实体类本身。
另请记住,您将无法选择整个依赖实体..只能选择普通属性(我假设是这种情况)。
关于Java 使用 JPA 2.1 和 @ManyToOne 上的 hibernate 部分加载实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44674317/