5

私はフォローしています

https://glassfish.java.net/javaee5/persistence/persistence-example.html

Java SE 環境で JPA をテストします。Eclipse では、次のことを行います。

  • 新しい JPA (2.1) プロジェクトを作成しました。
  • オプション-> JPA->永続クラス管理で、「注釈付きクラスはpersistence.xmlにリストする必要があります」ではなく、「注釈付きクラスを自動的に検出する」を選択しました。

zip ファイル (Client.java Customer.java Order.java) にあるツリー Java クラスを正常にインポートし、必要に応じて persistence.xml ファイルを変更しました。しかし、main を実行しようとすると、次のエラーが発生します。

[EL Info]: 2013-10-18 17:37:54.749--ServerSession(263489307)--EclipseLink, version: Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5
[EL Info]: connection: 2013-10-18 17:37:55.34--ServerSession(263489307)--file:/home/caterpillar/workspace/JPA_Java_SE/build/classes/_JPA_Java_SE login successful
[EL Warning]: metamodel: 2013-10-18 17:37:55.359--The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units.  Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element
Exception in thread "main" java.lang.IllegalArgumentException: Object: entity.Customer@5e80188f is not a known entity type.
    at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4228)
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:496)
    at client.Client.testInsert(Client.java:82)
    at client.Client.main(Client.java:49)

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="JPA_Java_SE">
        <properties>
            <property name="javax.persistence.logging.level" value="FINE"/>
            <property name="javax.persistence.logging.thread" value="false"/>
            <property name="javax.persistence.logging.session" value="false"/>
            <property name="javax.persistence.logging.timestamp" value="false"/>
            <property name="javax.persistence.logging.exceptions" value="false"/>

            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf8"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="password"/>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
        </properties>
    </persistence-unit>
</persistence>

プロジェクト ディレクトリ ツリー:

$ tree
.
├── build
│   └── classes
│       ├── client
│       │   └── Client.class
│       ├── entity
│       │   ├── Customer.class
│       │   └── Order.class
│       └── META-INF
│           └── persistence.xml
├── sql
│   ├── tables_derby.sql
│   └── tables_oracle.sql
└── src
    ├── client
    │   └── Client.java
    ├── entity
    │   ├── Customer.java
    │   └── Order.java
    └── META-INF
        └── persistence.xml

10 directories, 10 files

すべてのクラス コードは、 http ://glassfish.dev.java.net/javaee5/persistence/JPASE.zip で入手できるサンプル ファイルと同一です。

4

2 に答える 2

3

Paul Vargas によって提示されたものと同様の別のオプションがあり、persistence.xml ファイルも編集します。

どのクラスをエンティティとして管理するかをより詳細に制御したい場合は、次を使用します。

<exclude-unlisted-classes>true</exclude-unlisted-classes>

<class>YOUR CLASS CANNONICAL NAME</class>

于 2014-04-10T20:43:56.163 に答える