问题标签 [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.

0 投票
1 回答
2325 浏览

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 构建增强的任何其他方法吗?

0 投票
0 回答
72 浏览

java - 在 openjpa:sql 任务中包含模式生成

我正在使用openjpa-maven-plugin从我的 OpenJPA 持久性实体生成 DDL 文件。例如:

openjpa:sql任务生成以下 DDL:

如果我在新数据库上运行此 DDL,它会抱怨缺少myschema架构。所以理想的 DDL 输出应该是:

有没有办法告诉 Maven 插件也添加额外的 SQL 语句来创建模式?

0 投票
1 回答
775 浏览

maven - 如何在构建时使用 openJPA 增强来自单独 jar 的类?

我正在尝试使用 maven 插件增强来自另一个 Jar 的 Entity 类openjpa-maven-plugin,不幸的是我没有找到正确的方法来做到这一点。

我在 jar 中打包了一个MyPojo模块类:MyDomainmy-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 的类?

0 投票
1 回答
294 浏览

maven - [EXCEPTION]:任务执行异常,原因:java.lang.NoClassDefFoundError: org/apache/openjpa/conf/OpenJPAConfiguration

在我的 pom.xml 中包含与 Cassandra 相关的新依赖项后,我开始收到此异常。我在我的应用程序中使用它来记录日志。

这是我的 pom.xml :

这是日志项目的 pom.xml :

即使在具有 OpenJPAConfiguration 的 pom.xml 中包含 openjpa-all 依赖项后,我仍然看到此问题。对此的任何帮助将不胜感激。

0 投票
1 回答
1080 浏览

java - 警告诊断:警告:任何处理器都无法识别以下选项:'[openjpa.source, openjpa.metamodel]'

在 Open JPA 注释处理器/maven 插件上收到此警告?问题是什么?在另一个项目中,我没有收到此警告。

[警告]诊断:警告:任何处理器都无法识别以下选项:'[openjpa.source,openjpa.metamodel]'

0 投票
0 回答
614 浏览

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.idvalues变量 is[[1000000002], [5, 10]]都如预期的那样正确。

但是,在第二次调用时,cachedCriteriaQueryisSELECT s FROM Subtask s WHERE (s.deviceId IN ('1000000002') AND s.state IN (5,10)) ORDER BY s.id和 the valuesis [[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 1000000002and, state 5and 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". 为什么参数不是:deviceIdListand :states

spring我们使用的, spring-data-jpa,jdbc driver和libs的版本openjpa如下, jdk 是1.8, 数据库是PostgreSQL 9.4 windows version.

实体类在构建时通过openjpa-maven-plugin

EntityManagerFactoryBean设置persistence.xml如下_

即使我将QueryCacheQuerySQLCache都设置为false,它仍然无法正常工作。

但是,如果我将库降级openjpa为 version 2.2.2它完全适用于所有相同的 code 和 configuration。此外,如果我使用@Query下面的 subtaskDao 接口,即使使用openjpa version 2.4.1.

我没有发现的棘手问题是什么?

0 投票
1 回答
991 浏览

maven - 无法使用 Spring Boot 运行 OpenJPA 实体的静态增强

mvn packageopenjpa-maven-plugin:enhance在我尝试在 Spring Boot 应用程序中增强我的 JPA 实体时失败。

错误描述很长

enhance failed: MetaDataFactory could not be configured (conf.newMetaDataFactoryInstance() returned null).

no configuration properties were found.

它列出了一些原因:

  1. 确保你有一个 META-INF/persistence.xml 文件,它在你的类路径中可用

    • 我正在使用spring-data-jpaJava 配置,但没有
      persistence.xml. 没有它有可能 吗?openjpa:enhance
  2. 确保您用于配置的属性文件可用。如果您使用的是 Ant,请查看任务嵌套元素的 或 属性。

  3. 如果您的 OpenJPA 分发 jar 损坏,或者您的安全策略过于严格,也会发生这种情况。

    • 排除 - 我检查了重新下载的 OpenJPA jar 以checksumPolicy=fail证明它们没有损坏,而且我没有在这个级别使用任何安全策略。

pom.xml

openjpa-maven-plugin 错误

的子类JpaBaseConfiguration

0 投票
0 回答
73 浏览

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}' 是预期的。

0 投票
1 回答
1511 浏览

java - Java 无法连接到互联网 - java.net.ConnectException 连接超时

这是在我的 maven 项目中使用 OpenJPA 2.4.2 来自动化 JPA 实体的构建时增强:

这是一个例外:

上面的异常被 Java 吞并,而是吐出:

OpenJPA 的增强器正在打开persistence.xml并且Java 1.8XercesXML 处理正试图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

谢谢

0 投票
1 回答
1453 浏览

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 内部运行的测试进行。

还是我一开始就错了?