首页 > 解决方案 > 在 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。

标签: javaopenjpa

解决方案


推荐阅读