问题标签 [entitygraph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6336 浏览

java - 如何在 JPA @Query 注释中使用 IN 子句

我已经定义了这个方法

具有 ids 的列表不为空,也不为空,但我总是得到以下异常:

我很确定这与它定义的 IN 子句的方式有关。

欢迎任何建议!

0 投票
2 回答
2027 浏览

java - JPA 实体图的目标是什么?

我一直在学习JPA,我发现我们可以从JPA2.1 开始使用实体图。

但是我还没有理解实体图的优点。

我知道使用实体图的优点之一是我们可以只指定我们想要在整个实体中获取的数据,但是如果我们想要一个完整的实体,还有其他理由使用实体图吗?

或者我们应该只在我们想要检索部分数据时使用实体图?

如果我们在使用实体图时还有其他目的或优点,我想知道它。

0 投票
1 回答
1348 浏览

java - 基于包含 MappedSuperclass 的元模型的 JPA EntityGraph 不可能?

我正在尝试使用类型安全的方法EntityGraph.addAttributeNodes(Attribute<T, ?> ... attribute)来构建我的实体图。我有一个类型层次结构,@MappedSuperclass它基本上看起来像这样:

EclipseLink 创建了这个元模型:

问题是我无法dbid使用实体图 API 引用属性:

为此,方法签名是否不需要如下所示:EntityGraph.addAttributeNodes(Attribute<? super T, ?> ... attribute)?这是规范的缺点还是我忽略了什么?

在我看来,这是与此处描述的问题相关的问题。正如该问题的作者所指出的,get奇异属性的 Criteria API 方法确实用于? super X定义类型参数。

但是即使我添加了someAttribute节点,仍然有这个有点难看的警告,我认为它充其量只能被抑制:

0 投票
6 回答
49393 浏览

jpa - Spring Data JPA 和 NamedEntityGraphs

目前我正在努力只获取我需要的数据。findAll() 方法需要根据调用位置来获取数据。我不想最终为每个实体图编写不同的方法。另外,我会避免调用 entitymanagers 并自己形成(重复)查询。基本上我想使用 findAll 方法中的构建,但使用我喜欢的实体图。任何机会?

还有我的 JPARepository

0 投票
1 回答
16624 浏览

java - JPA的实体图的FETCH和LOAD有什么区别?

我是 JPA 的新手,我正在尝试使用实体图。我意识到当我检索数据时,我需要指定要使用的 EntityGraphType。

我阅读了 JPA2.1 规范,但我仍然不确定如何正确使用这两个选项...

问题是...

  • 如果我没有任何特定要求,我应该使用哪个选项?
  • 需要使用 Fetch 和 Load 的具体情况是什么?
0 投票
1 回答
3476 浏览

java - 如何使用 JPA 获取整个实体图

我使用 JPA 2.0 和 OpenJPA 作为底层实现。我有一个实体,它映射到自身以表示实体之间的父子层次结构。一个实体可以有多个子代,但最多只有一个父代。因此,没有父实体的实体位于层次结构的顶部。我的目标是从数据表中获取所有层次结构。所以我的查询为:

在 MyEntity 中,我将映射完成为:

当程序运行时,层次结构顶部的实体填充了它们的所有子实体,但子实体没有获取它们的子实体。我认为 EAGER fetch 将填充整个实体图。但事实并非如此。在 JPA 2.1 中有 EntityGraph ASAIK 的特性。但是如何在 JPA 2.0 中实现呢?

0 投票
0 回答
689 浏览

spring-data-jpa - 与 Spring 数据 jpa 1.9.1 一起使用时,@NamedEntityGraph 不起作用

我定义了以下实体

这是我的 CoursePlayerType 实体

这是我的 AICCAssignableUnit 实体

这是我的存储库

现在,当我像下面这样运行测试时

然后hibernate生成以下查询

为什么要选择所有文件?仅应包括实体图中设置的字段?

同样在此之后,它开始生成如下查询

为什么它会产生如此多的查询?为什么我的实体图不适用于存储库方法。难道我做错了什么 ?

谢谢

0 投票
1 回答
2341 浏览

java - JPA 实体图和分页

在我当前的项目中,我们在系统中有多个搜索页面,我们从数据库中获取大量数据以显示在 UI 中的大表格元素中。我们使用 JPA 进行数据访问(我们的提供者是 Hibernate)。大多数页面的数据是从多个数据库表中收集的——在许多情况下大约有 10 个——包括来自 OneToMany 关系的一些聚合数据(例如“类型 X 的关联实体的数量”)。为了提高性能,我们使用结果集分页TypedQuery.setFirstResult()TypedQuery.setMaxResults()当用户滚动表格时,延迟加载数据库中的其他行。由于搜索非常动态,我们使用 JPA CriteriaQuery API 来构建查询。但是,我们目前在某种程度上受到 N+1 SELECT 问题的困扰。实际上在某些情况下这很糟糕,因为我们可能会迭代 3 层嵌套的 OneToMany 关系,其中每一层的数据都是延迟加载的。我们不能真正将这些集合声明为在实体映射中预先加载,因为我们只在某些页面中对它们感兴趣。即,我们可能从几个不同页面中的同一个表中获取数据,但我们在不同页面中显示来自表和不同关联表的不同数据。

为了缓解这个问题,我们开始尝试使用 JPA 实体图,它们似乎对 N+1 SELECT 问题有很大帮助。但是,当您使用实体图时,Hibernate 显然会在内存中应用分页。我可以在一定程度上理解它为什么会这样做,但是在许多情况下,这种行为否定了实体图的很多(如果不是全部)好处。当我们不使用实体图时,我们可以在不应用任何 WHERE 限制的情况下加载数据(即,将整个表视为结果集),无论该表有几百万行,因为只有非常有限的行数实际上是由于分页而被提取的。现在分页是在内存中完成的,Hibernate 基本上会获取整个数据库表(加上实体图中定义的所有关系),然后在内存中应用分页,扔掉其余的行。不好。

所以问题是,是否有一种有效的方法可以使用 JPA(Hibernate)同时应用分页和实体图?如果 JPA 没有为此提供解决方案,那么特定于 Hibernate 的扩展也是可以接受的。如果这也不可能,那么其​​他选择是什么?使用数据库视图?视图会有点麻烦,因为我们支持多个数据库供应商。为不同的供应商创建所有必要的视图会大大增加开发工作量。

我的另一个想法是像我们目前一样应用实体图和分页,如果它们返回太多行,则根本不触发任何查询。我已经需要执行 COUNT 次查询以使行的延迟加载在 UI 中正常工作。

0 投票
1 回答
2343 浏览

java - Hibernate 忽略 fetchgraph

这是我的实体:

这就是我获取人员列表的方式:

如果我正确理解 fetch graph,它必须只加载我指定的那些字段。但是,“birthDate”字段也被加载。此外,我看到在休眠 sql 查询中选择了 4 列。

如何解决?我使用休眠 5.1.0 作为 JPA 提供程序。

0 投票
1 回答
783 浏览

java - JPA:EntityGraph 和地图

我使用 EclipseLink 2.6.3 作为 JPA 提供者。我有两个实体:

当我加载没有 EntityGraph 的 ClassA 实体时,一切正常。但是,如果我执行以下代码:

我得到以下异常:

如何解决?这是一个错误还是我做错了什么?