0

我将以下 JPA 代码与 MySQL DB 和 OpenJPA 2.2.2 一起使用:

@MappedSuperclass
public abstract class IdentifiableEntity implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    // getters, setters, etc.
}

@Entity
public class User extends IdentifiableEntity {
    private String name;

    // getters, setters, etc.
}

User user = new User();在 JSE 环境中执行此操作时收到此消息:

错误 [main] openjpa.Enhance - IdentifiableEntity Embeddable 中定义的身份字段不受支持。

我尝试在 Oracle 1.6 JDK 上运行 OpenJPA 动态加载的类增强器。尽管有消息,但代码似乎正在正确执行。

为什么我会收到此消息?是良性的吗?

以下是 的内容persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
 <persistence-unit name="persistenceUnit">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <properties>
      <property name="openjpa.ConnectionURL"
        value="jdbc:mysql://localhost:3306/playground?useUnicode=true&amp;characterEncoding=UTF-8"/>
      <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
      <property name="openjpa.ConnectionUserName" value="guest"/>
      <property name="openjpa.ConnectionPassword" value="guest"/>

      <!-- Classes should be enhanced at build-time for production. -->
      <property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
      <property name="openjpa.DynamicEnhancementAgent" value="true"/>

      <!-- Enable logging -->
      <property name="openjpa.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE" />
      <property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=true" />
    </properties>
 </persistence-unit>
</persistence>
4

2 回答 2

0

有同样的错误。经过一些调试,我发现打印出来的行来自补丁:OPENJPA-2233。它还会更改条件以添加 pcNewObjectIdInstance,但不会影响 MappedSuperclass 对象。

我想我们不应该打扰。我将在 apache JIRA 上创建一个问题。

于 2013-06-11T17:41:04.293 回答
0

OpenJpa 2.2.2 有同样的问题。

它与persistence.xml有关-当我使用为HSqlDb配置的persistence.xml增强我的实体时,一切正常。当我使用为 MySql Cluster 配置的 persistence.xml 时,它会出现该错误。因此,persistence.xml 中的某些内容似乎在增强期间触发了代码中的另一条路径,但它不起作用。

如果我发现有用的东西,我会回来评论。

我的 persistence.xml 具有两种配置

<?xml version="1.0"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
  <persistence-unit name="testdb" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
    <class>code.TestDataBean</class>
    <class>code.shared.DataBean</class>
    <class>code.shared.AbstractDataBean</class>
    <properties>
      <!-- HSqlDb -->
      <!--
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
      <property name="openjpa.ConnectionURL" value="jdbc:hsqldb:testdb" />
      <property name="openjpa.ConnectionDriverName" value="org.hsqldb.jdbcDriver" />
      <property name="openjpa.ConnectionUserName" value="sa" />
      <property name="openjpa.ConnectionPassword" value="" />
      <property name="openjpa.Log" value="DefaultLevel=TRACE" />
      -->
      <!-- MySql Cluster port 5000 -->
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
      <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
      <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:5000/clusterdb" />
      <property name="openjpa.ConnectionUserName" value="root" />
      <property name="openjpa.ConnectionPassword" value="" />
      <property name="openjpa.BrokerFactory" value="ndb" />
      <property name="openjpa.jdbc.DBDictionary" value="TableType=ndb"/>
      <property name="openjpa.ndb.connectString" value="localhost:1186" />
      <property name="openjpa.ndb.database" value="clusterdb" />
      <property name="openjpa.Log" value="DefaultLevel=TRACE" />
    </properties>
  </persistence-unit>
</persistence>
于 2013-07-04T05:56:06.847 回答