0

MySQL DB と OpenJPA 2.2.2 で次の JPA コードを使用しています。

@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 で定義された ID フィールドはサポートされていません。

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 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 に答える