问题标签 [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.
jpa - EclipseLink 在构造函数表达式中使用 SELECT ... AS 时抛出 JPQLException
我有一个使用EclipseLink 2.7.5的带有构造函数表达式的 JPQL 查询。
它失败了:
这适用于休眠。我认为这将是标准的 JPA 2.2 甚至 JPA 2.1 在AS
之后放置一个子句SELECT ...
,以便您可以重用ORDER BY
etc. 子句的标识符。
问:
怎么了?它是 EclipseLink 错误/缺失的功能吗?它不应该那样工作吗,因为 Hibernate 在这里有一些额外的肉?
如何在构造函数表达式中解决这个问题(无需重复ORDER BY
子句中的表达式)?
java - @Embeddable 是 Foo.class' PK 和 Bar.class' FK 到 Foo.class
我正在尝试在无法重新设计的数据库上定义 JPA 层。该层包含一个 OneToMany 关系,其中 Many 部分具有一个外键,该外键由一个部分作为主键的相同 2 个字段组成。
我该如何解决这个问题?我收到错误@Column(s) not allowed on a @ManyToOne property
jpa - JPA 2.2:哪一个是要添加到项目中的 API 工件?
JPA 2.2 添加了支持 java8 流的新功能:
尝试了两个工件:
但他们没有新的流方法。
要添加的正确 JPA 2.2 API 工件是什么?
仅 API 依赖,而不是提供者 impl。
hibernate - 非空属性以一对一的关系引用空值或瞬态值
从休眠 5.1 迁移到休眠 5.4 后,我的应用程序出现此异常: org.hibernate.PropertyValueException:非空属性引用空值或瞬态值:com.vermeg.apps.myJpaProject.Contract.customer
- 应用程序.java
- 客户.java
- 合同.java
- 例外
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 版本?
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 查询
hibernate - Hibernate:persistence.xml 中的错误 - 元素“persistence-unit”不能包含文本内容。内容类型被定义为仅元素
我正在使用 Hibernate,下面的 persistence.xml 工作正常。但是在 Eclipse 中从 Table 创建一个新的 JPA 实体后,persistence.xml 给出错误 - 元素“persistence-unit”不能包含文本内容。内容类型被定义为仅元素。我已从 persistence.xml 中删除了新类,但错误仍然存在。
java - org.eclipse.persistence.indirection.IndirectMap 无法使用 EclipseLink 转换为 org.eclipse.persistence.queries.FetchGroupTracker
我有以下设计:
一场体育比赛有两个得分(每队一个),每个得分有多个球员统计数据,每个球衣号码一个。两种关系都映射为Map
。这只是多级聚合。
Game
实体:
Score
实体(PK是“主场或客场比赛”,所以Boolean home
PK中的一个就足够了):
ScoreId
PK类:
PlayerStat
实体:
PlayerStatId
:
以下查询有效:
更进一步,获取附加到每个分数的玩家统计数据:
...EclipseLink 失败并显示:
问题:
怎么了?一定有什么问题subgraph = Score.FETCH_PLAYER_STATS
。
这是 EclipseLink 中的错误吗?映射错误?查询+图错了?
EclipseLink 版本是 2.7.7,请参阅 stacktrace。
PS:这在 Hibernate BTW 中有效。
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
也可以使用但不同:
但是,当然,第一个解决方案更容易。
java - JPA 或 Hibernate 中的“持久类”和“实体”有什么区别?
第一件事:
- 我知道这个问题,在高度抽象的情况下,我在这里问的问题是一样的;但是,我发现它(及其答案)缺乏,因此,我想在这里详细说明这个主题;
- 我会请任何对 JPA 和 Hibernate 中的正式定义有很好理解的人来帮助我澄清这个混乱。
免责声明:我不是在寻找有关实体是什么以及如何使用它的基本解释。我使用 Hibernate/JPA 已经有一段时间了。
我的问题更多是关于正式定义,以澄清Entity和Persistent Class之间的正式语义(定义)的区别,以明确一个与另一个之间的区别以及它们是如何定义的。
最初,我希望在JSR 338:JPA 规范 2.2和Hibernate 5.0.0 参考文档中找到答案,但我很困惑,因为我有一种感觉,在这种情况下,两个文档都缺少,离开这些概念/定义重叠并引入一些推测的空间很大。
让我们从 JSR 338:JPA 2.2 规范开始:
由于某些(对我来说很奇怪)的原因,在整个规范中,没有找到关键字短语“Persistent Object”和“Persistent Class”,也就是说,它们分别只找到一次和两次:
- 持久对象- 在 Javadoc 注释中找到,没有什么有趣的说法(第 221 页)
- 持久类- 再次在 xsd 文档中找到,没什么好说的(第 378、529 页)
不幸的是,这就是本规范中的内容,仅此而已。
另一方面,实体类定义如下:
实体是轻量级的持久域对象。主要的编程工件是实体类。一个实体类可以使用辅助类作为辅助类或用来表示实体的状态。
再一次,我发现正式规范文档极其缺乏,但至少,这表明它是一个持久的域对象。
在同一个文档中,实体也被定义为一个类(2.1 实体类,第 23 页)。
尽管这看起来可能并不重要,但将其定义为Persistent Object还是Class是相当令人困惑的。
我基于此规范文档的结论:
- JPA 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 方面的语义和明确差异/重叠是什么?