在复杂条件下使用JPA实体图

0

我有一个基于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有关联

在这里,我只是Company使用填充的reviews集合获取一个对象这在上述情况下效果很好。但是,如果我想获取给定公司的全部或部分评论,该怎么办?也就是说,Review与具有给定ID的公司关联对象。我想要一个List<Review>而不是带有的Company对象List<Review>这只是一个例子-基本上,我正在寻找比仅基于主键查找对象更大的灵活性。我可以毫无问题地使用HQL做到这一点,但随后我将不得不编写几个类似的查询,具体取决于我在特定上下文中需要的数据。

上的find方法javax.persistence.EntityManager仅使基于主键查询对象成为可能。但是,是否可以在更复杂的场景中使用实体图,例如使用Criteria对象或HQL查询?例如,使用除主键之外的其他条件(甚至可能是关联条件)查找对象。

我希望我能说清楚。提前致谢!

安德烈一世

您要找的不是EntityGraphs,而是JPA Query(aNamedQuery或a形式的JPQL CriteriaQuery)。这都是JPA规范的一部分。

所以基本上您可以:

  1. 注释每个实体@NamedQueries以指定JPQL查询。它们的优点是在部署时会检查其语法(例如,如果NamedQueries访问缺少的属性,则部署将失败)并且可重用,缺点是:它们是静态定义的(但当然接受参数)。
  2. 使用EntityManager在运行时JPQL查询构造由于上述优点,我比运行时查询更经常使用NamedQueries。
  3. 使用Criteria API具有优势,它们是类型安全的,因为您可以在真实的Java对象中加入/搜索/添加条件/对其进行播放。

关于EntityGraphs:现在,它们只是一个帮助,因此可以从查询中获取其他字段(无论是否EntityManager.find()与附加属性map参数或结合使用Query.setHints())。您也可以在更复杂的情况下使用子图。检查这个这个例子

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

QueryDSL和JPA 2.1实体图

来自分类Dev

使用awk在复杂条件下计数

来自分类Dev

C#EntityFramework:更新/添加/删除任意复杂的实体图

来自分类Dev

复杂条件下的左外连接

来自分类Dev

复杂条件下的左外连接

来自分类Dev

Spring Data JPA中的命名实体图JOINS结果(需要不同的选项)

来自分类Dev

在Where条件下的实体框架ISNULL

来自分类Dev

标准API和实体图

来自分类Dev

标准API和实体图

来自分类Dev

实体图上的JPA更改事件[EclipseLink]

来自分类Dev

在IN条件下使用Order By

来自分类Dev

在if条件下使用Int

来自分类Dev

在IN条件下使用Order By

来自分类Dev

在多个条件下使用.GroupJoin扩展名时,如何使LINQ中的类型与实体匹配?

来自分类Dev

在实体框架中合并 2 个实体图

来自分类Dev

命名实体图子子图

来自分类Dev

MongoDB Spring数据,复杂条件下的最大聚合

来自分类Dev

在 Entity Framework Core 中添加实体图

来自分类Dev

在某些条件下使用总和

来自分类Dev

PHP:在if条件下使用$ count ++

来自分类Dev

如何在if条件下使用expr

来自分类Dev

在多种条件下使用IF函数

来自分类Dev

如何在if条件下使用数组

来自分类Dev

在条件下使用基本ifelse

来自分类Dev

if条件下如何使用reduce

来自分类Dev

在if条件下使用head -n

来自分类Dev

在特殊条件下使用CTE

来自分类Dev

在SUMIF条件下如何使用INDIRECT?

来自分类Dev

如何在if条件下使用数组