【发布时间】:2015-02-06 06:48:54
【问题描述】:
我有一个基于 Spring MVC + JPA + Hibernate 的项目。我正在使用实体图 (JPA 2.1) 来定义要从数据库中获取哪些数据,如下例所示。
EntityGraph<Company> entityGraph = entityManager.createEntityGraph(Company.class);
entityGraph.addAttributeNodes("reviews");
Map<String, Object> hints = new HashMap<String, Object>();
hints.put("javax.persistence.loadgraph", entityGraph);
Company company = entityManager.find(Company.class, companyId, hints);
我的 Review 实体与 Company 实体 (ManyToOne) 有关联。
这里我只是获取一个带有填充reviews 集合的Company 对象。这在上述情况下效果很好。但是,如果我想获取给定公司的全部或部分评论怎么办?也就是说,Review 对象与具有给定 ID 的公司相关联。我想要一个List<Review> 而不是带有List<Review> 的Company 对象。这只是一个例子——基本上我正在寻找比简单地基于主键查找对象更大的灵活性。我可以使用 HQL 毫无问题地做到这一点,但是我必须根据我在特定上下文中需要哪些数据来编写几个类似的查询。
javax.persistence.EntityManager 上的 find 方法可以简单地根据主键查询对象。但是是否有可能在更复杂的场景中使用实体图,例如使用 Criteria 对象或 HQL 查询?例如,通过主键以外的其他条件查找对象 - 甚至可能是关联条件。
我希望我说清楚了。提前致谢!
【问题讨论】:
标签: java spring hibernate spring-mvc jpa