问题标签 [openjpa-maven-plugin]
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.
java - 使用 OpenJPA 将应用程序升级到 Java 8
我正在尝试将我的应用程序升级到 Java 8,但它使用 OpenJPA 通过 openjpa-maven-plugin 2.3.0 增强构建时间,这似乎是最后一个版本。
当我构建我的应用程序时,我得到一个 IllegalArgumentException,因为该版本的插件正在使用依赖于 org.apache.xbean.asm4.ClassReader 的 PCEnhancer,它与 Java 8 不兼容。我找到了这张票:https:// issues.apache.org/jira/browse/OPENJPA-2386,但仍然没有解决。
你知道在不使用 openjpa-maven-plugin 的情况下实现 openjpa 构建增强的任何其他方法吗?
java - 在 openjpa:sql 任务中包含模式生成
我正在使用openjpa-maven-plugin
从我的 OpenJPA 持久性实体生成 DDL 文件。例如:
该openjpa:sql
任务生成以下 DDL:
如果我在新数据库上运行此 DDL,它会抱怨缺少myschema
架构。所以理想的 DDL 输出应该是:
有没有办法告诉 Maven 插件也添加额外的 SQL 语句来创建模式?
maven - 如何在构建时使用 openJPA 增强来自单独 jar 的类?
我正在尝试使用 maven 插件增强来自另一个 Jar 的 Entity 类openjpa-maven-plugin
,不幸的是我没有找到正确的方法来做到这一点。
我在 jar 中打包了一个MyPojo
模块类:MyDomain
my-domain.jar
在我的第二个项目MyJpa
打包my-jpa.jar
中,它依赖于 module my-domain.jar
,并且 Maven 被配置为使用 Build Time OpenJPA Enhancer 并具有以下内容:
我正在使用以下orm.xml
声明的 XML 映射persistence.xml
:
并使用如下所示的 orm.xml:
运行mvn install
给出以下错误:
此配置不允许运行时优化,但以下列出的类型在构建时或类加载时未使用 javaagent 增强:
当我将类移动MyPojo
到项目MyJpa
中(而不是项目 MyDomain)时,它可以工作。
所以我的问题是:我需要配置什么才能在构建时增强MyPojo
来自外部 Jar 的类?
maven - [EXCEPTION]:任务执行异常,原因:java.lang.NoClassDefFoundError: org/apache/openjpa/conf/OpenJPAConfiguration
在我的 pom.xml 中包含与 Cassandra 相关的新依赖项后,我开始收到此异常。我在我的应用程序中使用它来记录日志。
这是我的 pom.xml :
这是日志项目的 pom.xml :
即使在具有 OpenJPAConfiguration 的 pom.xml 中包含 openjpa-all 依赖项后,我仍然看到此问题。对此的任何帮助将不胜感激。
java - 警告诊断:警告:任何处理器都无法识别以下选项:'[openjpa.source, openjpa.metamodel]'
在 Open JPA 注释处理器/maven 插件上收到此警告?问题是什么?在另一个项目中,我没有收到此警告。
[警告]诊断:警告:任何处理器都无法识别以下选项:'[openjpa.source,openjpa.metamodel]'
postgresql - 由于 cachedCriteriaQuery 在 openjpa 2.4.1 上不正确,因此无法通过带有后缀 IN 的 spring-data-jpa 查询方法进行查询
更新:
在我深入研究了 spring-data-jpa 存储库查询方法的源代码后,我发现根本原因是PartTreeJpaQuerycreateQuery
的方法,如下所示。
该方法会在调用spring-data-jpa仓库查询方法接口时被RepositoryFactorySupport的QueryExecutorMethodInterceptor的invoke方法调用。
在第一次调用时,cachedCriteriaQuery
变量 willSELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id
和values
变量 is[[1000000002], [5, 10]]
都如预期的那样正确。
但是,在第二次调用时,cachedCriteriaQuery
isSELECT s FROM Subtask s WHERE (s.deviceId IN ('1000000002') AND s.state IN (5,10)) ORDER BY s.id
和 the values
is [[1000000003], [5]]
。看起来传递给 openjpa 和 jpa 查询的值是正确的,但criteriaQuery
不是。
如果我将openjpa
库更改为2.2.2版本,则每次调用此方法时,cachedCriteriaQuery
变量都是ALWAYS SELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id
。
为什么
cachedCriteriaQuery
变量会改变?它是 PartTreeJpaQuery 的 QueryPreparer 的私有和最终字段,唯一可以分配它的方法是 QueryPreparer 的构造函数。我已经在那里设置了一个断点,但是在第一次和第二次调用之间,我没有看到任何进程调用了这个构造函数,这个变量怎么会改变?
我所做的只是更改了 openjpa 库。
但上面的代码是 spring-data-jpa 和/或 spring-data-commons。这如何影响查询创建的行为?
给出如下单元测试代码,通过 and 字段查询子find IN
任务deviceId
实体state
。第一次查询是 find IN deviceId 1000000002
and, state 5
and 10
。第二次查询是 find IN deviceId1000000003
和 state 5
。
subtaskDaospring-data-jpa repository query method
接口如下
然而,结果如下,并不像我们预期的那样正确。第二次查询出来了,结果是 deviceId 的子任务,1000000002
而不是 deviceId 1000000003
。
根据 openjpa.Log,第一次查询(在第 7272 行)Query "SELECT s FROM Subtask s WHERE (s.deviceId IN (:deviceIdList) AND s.state IN (:states)) ORDER BY s.id"
。但在第二次,它查询Query "SELECT s FROM Subtask s WHERE (s.deviceId IN ('1000000002') AND s.state IN (5,10)) ORDER BY s.id"
. 为什么参数不是:deviceIdList
and :states
?
spring
我们使用的, spring-data-jpa
,jdbc driver
和libs的版本openjpa
如下, jdk 是1.8
, 数据库是PostgreSQL 9.4 windows version
.
实体类在构建时通过openjpa-maven-plugin
EntityManagerFactoryBean
设置persistence.xml
如下_
即使我将QueryCache和QuerySQLCache都设置为false,它仍然无法正常工作。
但是,如果我将库降级openjpa
为 version 2.2.2
,它完全适用于所有相同的 code 和 configuration。此外,如果我使用@Query
下面的 subtaskDao 接口,即使使用openjpa version 2.4.1
.
我没有发现的棘手问题是什么?
maven - 无法使用 Spring Boot 运行 OpenJPA 实体的静态增强
mvn package
openjpa-maven-plugin:enhance
在我尝试在 Spring Boot 应用程序中增强我的 JPA 实体时失败。
错误描述很长
enhance failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null).
no configuration properties were found.
它列出了一些原因:
确保你有一个 META-INF/persistence.xml 文件,它在你的类路径中可用
- 我正在使用
spring-data-jpa
Java 配置,但没有
persistence.xml
. 没有它有可能 吗?openjpa:enhance
- 我正在使用
确保您用于配置的属性文件可用。如果您使用的是 Ant,请查看任务嵌套元素的 或 属性。
- 我在 Spring 的子类中指定了所有 OpenJPA 属性
org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration
- 请参见下面的类。这可能是我需要改变的,但是如何改变?以及在哪里指定属性文件以便openjpa-maven-plugin
可以找到它?
- 我在 Spring 的子类中指定了所有 OpenJPA 属性
如果您的 OpenJPA 分发 jar 损坏,或者您的安全策略过于严格,也会发生这种情况。
- 排除 - 我检查了重新下载的 OpenJPA jar 以
checksumPolicy=fail
证明它们没有损坏,而且我没有在这个级别使用任何安全策略。
- 排除 - 我检查了重新下载的 OpenJPA jar 以
pom.xml
openjpa-maven-plugin 错误
的子类JpaBaseConfiguration
jpa - openjpa增强器在一对多上失败,但只有在一对一之后?
当我使用在一对一映射之后列出的一对多映射设置我的开放 JPA 实体映射时,我得到以下异常。当我切换顺序时,我没有得到异常。
我假设应用了 XSD 规则,但该规则的目的是什么?
无法在项目上执行目标 org.apache.openjpa:openjpa-maven-plugin:2.2.2:enhance (enhancer):目标 org.apache.openjpa:openjpa-maven-plugin:2.2.2:enhance 的执行增强器失败: org.xml.sax.SAXException:发现以元素“一对多”开头的无效内容。'{“ http://java.sun.com/xml/ns/persistence/orm ”之一:一对一,“ http://java.sun.com/xml/ns/persistence/orm ”:多对多,“ http://java.sun.com/xml/ns/persistence/orm ”:元素集合,“ http://java.sun.com/xml/ns/persistence/orm ”:嵌入,“ http://java.sun.com/xml/ns/persistence/orm ”:transient}' 是预期的。
java - Java 无法连接到互联网 - java.net.ConnectException 连接超时
这是在我的 maven 项目中使用 OpenJPA 2.4.2 来自动化 JPA 实体的构建时增强:
这是一个例外:
上面的异常被 Java 吞并,而是吐出:
OpenJPA 的增强器正在打开persistence.xml
并且Java 1.8
的Xerces
XML 处理正试图http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd
从网上抢夺。
进行了一些调试才能找到该发现-grrrr。
我发现我工作的公司的 DNS 被破坏了。我可以在浏览器中获取 XSD 文件 - firefox 或 IE - 但如果我使用curl
,我会看到它无法连接并且它得到了一个错误的 IP。
我怎么能:
(a) 发现 XSD 文件的 IP 地址或 (b) 指示 Java 或 Maven 从本地文件中获取 XSD
谢谢
java - 如何在运行 Arquillian 测试时执行 JPA 实体的构建时间增强?
技术栈:Arquillian Embedded-tomee、HSQLDB、openJpa、jdk 1.8。
我花了几天时间试图弄清楚如何让这一切一起工作,并且已经非常接近 IMO。现在我被这个非常普遍的错误困住了。
我已将所有实体添加到test-persistence.xml
并正确放置在src/test/resources
.
我尝试设置Runtime Unenhanced Classes
的初始问题supported
并希望在Arquillian-Embedded-Tomee
容器内的运行时发生增强。那里没有运气。不断收到错误消息,即我的某些实体没有运行时增强所需的公共/受保护的无参数构造函数。
注意:运行时增强在实际部署的 tomee 容器中运行良好。只是在 Arquillian 内部不起作用。
解决上述问题的第一种方法:
我不想将我的实体公开。所以切换到build-time-enhancement
使用这里openjpa maven plugin
描述的。这种方法取得了一些成功。实际上可以看到并验证在运行时实体正在得到增强。mvn clean install
构建输出:
等等...
但这里的问题是:测试仅在 Maven 构建期间通过。如果我尝试运行测试类中的单个测试或该测试类中的所有测试,它们会失败。而且在这种方法中,我在持久性上下文中禁用了对未增强类的运行时支持。
因此,我得出结论,它openjpa-maven-plugin
按预期工作。
问题 1:这是预期的行为吗?测试在 Maven 构建之外不起作用吗?问题2:openjpa 插件是否提供了javaagent
幕后功能?
不知道该怎么做,我改用了另一种(???)方法:尝试使用此处发布javaagent
的类似问题所描述的
运行增强功能。没有成功。最终出现以下错误:
问题 3:那么如何设置构建时间增强功能,并确保这些增强功能适用于我运行的每个单元测试?
问题 4:更好的是,我如何(如果可能)将构建时间增强设置为仅针对在 Arquillian 内部运行的测试进行。
还是我一开始就错了?