问题标签 [jpa-2.2]

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 投票
1 回答
522 浏览

jpa - EclipseLink 在构造函数表达式中使用 SELECT ... AS 时抛出 JPQLException

我有一个使用EclipseLink 2.7.5的带有构造函数表达式的 JPQL 查询。

它失败了:

这适用于休眠。我认为这将是标准的 JPA 2.2 甚至 JPA 2.1 在AS之后放置一个子句SELECT ...,以便您可以重用ORDER BYetc. 子句的标识符。

怎么了?它是 EclipseLink 错误/缺失的功能吗?它不应该那样工作吗,因为 Hibernate 在这里有一些额外的肉?

如何在构造函数表达式中解决这个问题(无需重复ORDER BY子句中的表达式)?

0 投票
1 回答
21 浏览

java - @Embeddable 是 Foo.class' PK 和 Bar.class' FK 到 Foo.class

我正在尝试在无法重新设计的数据库上定义 JPA 层。该层包含一个 OneToMany 关系,其中 Many 部分具有一个外键,该外键由一个部分作为主键的相同 2 个字段组成。

我该如何解决这个问题?我收到错误@Column(s) not allowed on a @ManyToOne property

0 投票
1 回答
41 浏览

jpa - JPA 2.2:哪一个是要添加到项目中的 API 工件?

JPA 2.2 添加了支持 java8 流的新功能:

尝试了两个工件:

但他们没有新的流方法。

要添加的正确 JPA 2.2 API 工件是什么?

仅 API 依赖,而不是提供者 impl。

0 投票
1 回答
1614 浏览

hibernate - 非空属性以一对一的关系引用空值或瞬态值

从休眠 5.1 迁移到休眠 5.4 后,我的应用程序出现此异常: org.hibernate.PropertyValueException非空属性引用空值或瞬态值:com.vermeg.apps.myJpaProject.Contract.customer

  • 应用程序.java
  • 客户.java
  • 合同.java
  • 例外
0 投票
2 回答
530 浏览

websphere - 支持jpa2.2的websphere

所以我升级了我的应用程序以使用支持 jpa 2.2 的 hibernate 5.4 我曾经使用 websphere 9 作为我的应用程序服务器,但不幸的是这个服务器只支持 jpa 2.0 和 2.1 我曾尝试将 5.4 与 jpa2.1 一起使用它可以工作但我可能会导致问题在我以后的申请中。那么有没有支持 jpa 2.2 的 websphere 版本?

0 投票
0 回答
238 浏览

postgresql - Spring Data JPA @Query NamedQuery 不适用于两个 @Params

只传递了一个@Param,它运行良好,如下所示,无论是名字还是姓氏。spring-boot 版本 2.2.0.RELEASE 正在使用。

但是如果通过两个 @Params 它会抛出以下异常。firstName 和 lastName 在实体定义中属于 TEXT 类型。如果 firstName 正在传递,则 lastName 从 Controller 设置为“null”,反之亦然。

运行时异常:

一次只有一个输入 @Param 正在工作。请提出任何解决此问题的方法。

Hibernate 生成的 SQL 查询

0 投票
1 回答
324 浏览

hibernate - Hibernate:persistence.xml 中的错误 - 元素“persistence-unit”不能包含文本内容。内容类型被定义为仅元素

我正在使用 Hibernate,下面的 persistence.xml 工作正常。但是在 Eclipse 中从 Table 创建一个新的 JPA 实体后,persistence.xml 给出错误 - 元素“persistence-unit”不能包含文本内容。内容类型被定义为仅元素。我已从 persistence.xml 中删除了新类,但错误仍然存​​在。

0 投票
1 回答
254 浏览

java - org.eclipse.persistence.indirection.IndirectMap 无法使用 EclipseLink 转换为 org.eclipse.persistence.queries.FetchGroupTracker

我有以下设计:

在此处输入图像描述

一场体育比赛有两个得分(每队一个),每个得分有多个球员统计数据,每个球衣号码一个。两种关系都映射为Map。这只是多级聚合。

Game实体:

Score实体(PK是“主场或客场比赛”,所以Boolean homePK中的一个就足够了):

ScoreIdPK类:

PlayerStat实体:

PlayerStatId

以下查询有效:

更进一步,获取附加到每个分数的玩家统计数据:

...EclipseLink 失败并显示:

问题

怎么了?一定有什么问题subgraph = Score.FETCH_PLAYER_STATS

这是 EclipseLink 中的错误吗?映射错误?查询+图错了?

EclipseLink 版本是 2.7.7,请参阅 stacktrace。

PS:这在 Hibernate BTW 中有效。

0 投票
2 回答
1395 浏览

java - JPA 标准按相关实体过滤,无需连接

我想知道如何使用 JPA Criteria API 通过相关实体的外键过滤实体。

假设我有以下两个实体:

我想查询ids(1,2,3)部门下的员工。

我能够使用 Hibernate 的废弃标准来做到这一点,并且想知道如何使用 JPA Criteria predicate without join (root.join)来做到这一点。我不需要任何连接或子查询是合乎逻辑的,因为可以从一个表中获取所需的结果:

** 更新 **

我的问题是——对于 JPA 标准来说是新的,并且来自已弃用的 Hibernate 标准——我使用了 CriteriaBuilder 中的所有 API,例如 (equal, notEqual, isNull, like, .....); 并且,因此,使用了CriteriaBuilder.In(experssion).in(values). 但是,如@frank 的回答所示,我发现对于 IN 的使用,我将使用Root.get(<attr>).in(<values>)

CriteriaBuilder.in也可以使用但不同:

但是,当然,第一个解决方案更容易。

0 投票
0 回答
439 浏览

java - JPA 或 Hibernate 中的“持久类”和“实体”有什么区别?

第一件事:

  1. 我知道这个问题,在高度抽象的情况下,我在这里问的问题是一样的;但是,我发现它(及其答案)缺乏,因此,我想在这里详细说明这个主题;
  2. 我会请任何对 JPA 和 Hibernate 中的正式定义有很好理解的人来帮助我澄清这个混乱。

免责声明:我不是在寻找有关实体是什么以及如何使用它的基本解释。我使用 Hibernate/JPA 已经有一段时间了。

我的问题更多是关于正式定义,以澄清EntityPersistent Class之间的正式语义(定义)的区别,以明确一个与另一个之间的区别以及它们是如何定义的。

最初,我希望在JSR 338:JPA 规范 2.2Hibernate 5.0.0 参考文档中找到答案,但我很困惑,因为我有一种感觉,在这种情况下,两个文档都缺少,离开这些概念/定义重叠并引入一些推测的空间很大。


让我们从 JSR 338:JPA 2.2 规范开始:

由于某些(对我来说很奇怪)的原因,在整个规范中,没有找到关键字短语“Persistent Object”和“Persistent Class”,也就是说,它们分别只找到一次和两次:

  • 持久对象- 在 Javadoc 注释中找到,没有什么有趣的说法(第 221 页)
  • 持久类- 再次在 xsd 文档中找到,没什么好说的(第 378、529 页)

不幸的是,这就是本规范中的内容,仅此而已。

另一方面,实体类定义如下

实体是轻量级的持久域对象。主要的编程工件是实体类。一个实体类可以使用辅助类作为辅助类或用来表示实体的状态。

再一次,我发现正式规范文档极其缺乏,但至少,这表明它是一个持久的域对象

在同一个文档中,实体也被定义为一个类(2.1 实体类,第 23 页)。

尽管这看起来可能并不重要,但将其定义为Persistent Object还是Class是相当令人困惑的。

我基于此规范文档的结论:

  1. JPA 2.2 规范中根本没有定义持久类/对象;
  2. Entity被定义为持久对象并且(!),作为一个Class,这对我来说真的不清楚;

在我的概念理解中,Persistent Object听起来很像一个对象,如果(!)它将被相应地映射,它是可持久的; 因此,Persistent Class - 作为一个Class,如果相应地映射类,则可以将其实例持久化(即,通过符合 POJO 概念,它们可以存储到数据库层中)。即Persistent Class是一个可持久的类,如果它有对应的映射定义(使用 .hbm.xml 或 JPA 注释),它会转换为Entity 。


Hibernate 5 参考文档

另一方面,Hibernate定义了 Persistent Classes,它这样做如下:

持久类是应用程序中实现业务问题实体的类(例如,电子商务应用程序中的客户和订单)。这里的术语“持久化”是指类能够被持久化,而不是它们处于持久化状态。

我说的对吗,Persistent Classes 实现了实体的意思,我的上层理解是正确的,Persistent Class只是一个 Java 类,它实现了Entity模型(没有映射),并结合它的映射(.hbm. xml 或 JPA)它成为一个实体持久类 + 映射定义 = 实体是否正确?


我还会在此处插入Java Persistence with Hibernate, Second Edition书中的一些片段:

您编写了一个持久类及其带有注释的映射。- (总结 2.4);

有点,将持久类与其映射区分开来,并且再次支持这样的想法,即持久类及其映射是不同的概念,从逻辑上讲,仅持久类本身就不是实体。

持久性类不知道并且不依赖于持久性机制。- (第 3.2 章);

明确指出,持久类不知道持久性机制。

例如,您可以在持久性上下文之外,在单元测试或表示层中重用持久性类。您可以使用常规 Java new 运算符在任何运行时环境中创建实例,从而保持可测试性和可重用性。-(第 3.2 章)。

也支持这样的想法,即持久类不一定是映射实体。

我的结论:(
基于我最初的理解,这似乎得到了《Hibernate Reference Documentation》和《Java Persistence with Hibernate, Second Edition》一书的支持。)

持久类是 Java 类,它(如果需要!)将符合 JPA 规范(根据该规范,它们需要是 POJO 并且可以映射),但如果它们没有映射它们就不是实体,它们可以可以在 JPA 之外的上下文中使用,就像在普通 Java 对象上一样对它们进行操作,甚至在表示层上呈现它们。


最后:

如您所见,我的问题有点混合了不同的资源,显示出我明显的困惑,因为我无法清楚地定义正式的,即这两个概念的所谓科学采用的定义。

我们能否清楚地定义什么是Persistent Class,什么是Entity,以及它们在 JPA 和 Hibernate 方面的语义明确差异/重叠是什么?