java - 在 intellij 上使用 openjpa 进行手动动态增强
问题描述
我正在尝试使用 openjpa 和 mysql 来持久化一个类,实际上并没有什么戏剧性的。
Attempt to cast instance "xxx" to PersistenceCapable failed. Ensure that it has been enhanced.
所以我环顾四周,发现了这个 https://openjpa.apache.org/builds/2.2.1/apache-openjpa/docs/ref_guide_pc_enhance.html 他们建议使用
java -javaagent:/home/dev/openjpa/lib/openjpa.jar com.xyz.Main
现在我将它添加到我的 intellij 运行时配置中的 VM-Options 中:
-javaagent:/home/xxx/Downloads/apache-openjpa-3.1.2/openjpa-all-3.1.2.jar main.java.entity.Post
但它似乎不承认这个类:
You have enabled runtime enhancement, but have not specified the set of persistent classes. OpenJPA must look for metadata for every loaded class, which might increase class load times significantly.
我认为 javaagent 的第二个参数是我指定类,但我错了。
这是我的persistence.xml:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.2"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<!-- Define persistence unit -->
<persistence-unit name="post">
<class>main.java.entity.Post</class>
<properties>
<property name="openjpa.DynamicEnhancementAgent" value="true"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/DSTEST" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="xxx" />
<property name="javax.persistence.jdbc.password" value="xxx" />
</properties>
</persistence-unit>
这是我的实体:
package main.java.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity (name="post")
public class Post {
@Id
private Integer postid;
private String user;
private Integer datum;
private String inhalt;
public Integer getPostid() {
return postid;
}
public void setPostid(Integer postid) {
this.postid = postid;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public Integer getDatum() {
return datum;
}
public void setDatum(Integer datum) {
this.datum = datum;
}
public String getInhalt() {
return inhalt;
}
public void setInhalt(String inhalt) {
this.inhalt = inhalt;
}
}
我在 Ubuntu 上使用 Intellij。
解决方案
推荐阅读
- java - 用于上传文件的 WebScript:在第一次上传期间创建了一个额外的版本
- angular - datePipe Angular 中的 i18n
- c - 在 C 中每第 n 列 (K&R 1-22) 折叠输入行
- linux - 如何将命令的输出(输出是数字)与数字进行比较?尝试查看输出是否大于等于1
- rust - 如何解决 HRTB 错误?
- javascript - 在 Vue.js 中转换数组数组
- hyperledger-fabric - 无法读取超级账本作曲家中未定义的属性“getModelManager”
- linux - 将特定行复制并附加到具有特定名称格式的文件中?
- ios - 将日历格鲁吉亚语更改为波斯语时,无法强制将“NSLocale”类型的值转换为“Locale”类型
- c# - 移动应用程序和 Web 应用程序 API 命中