Java SE 上的 JPA:对象:entity.Customer@5e80188f 不是已知的实体类型
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19454725/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JPA on Java SE: Object: entity.Customer@5e80188f is not a known entity type
提问by Germano Massullo
I am following
我正在关注
https://glassfish.java.net/javaee5/persistence/persistence-example.html
https://glassfish.java.net/javaee5/persistence/persistence-example.html
to test JPA in a Java SE environment. In Eclipse, I:
在 Java SE 环境中测试 JPA。在 Eclipse 中,我:
- created a new JPA (2.1) project;
- in options->JPA->Persistent class management, I selected "Discover annotated classes automatically" instead of "Annotated classes must be listed in persistence.xml".
- 创建了一个新的 JPA (2.1) 项目;
- 在选项->JPA->持久类管理中,我选择了“自动发现带注释的类”而不是“带注释的类必须列在persistence.xml中”。
I successfully imported the tree Java classes that are in the zip file (Client.java Customer.java Order.java) and modified the persistence.xml file to fit my needs. But I obtain the following errors when trying to excecute main.
我成功地导入了 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&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>
Project dir tree:
项目目录树:
$ 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
All clases code is identical to example file avaible at http://glassfish.dev.java.net/javaee5/persistence/JPASE.zip
所有类代码与http://glassfish.dev.java.net/javaee5/persistence/JPASE.zip 上的示例文件相同
采纳答案by Paul Vargas
The next line is missing in your persistence.xml
:
您的 中缺少下一行persistence.xml
:
<exclude-unlisted-classes>false</exclude-unlisted-classes>
This line is placed as in the following example:
该行的放置方式如下例所示:
<?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="SamplePU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample"/>
<property name="javax.persistence.jdbc.password" value="123"/>
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="eclipselink.logging.level" value="ALL"/>
<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
</properties>
</persistence-unit>
</persistence>
回答by Pedro García Medina
There is another option, similar to the one presented by Paul Vargas, also editing the persistence.xml file.
还有另一个选项,类似于 Paul Vargas 提供的选项,也编辑persistence.xml 文件。
If you want to have more control over which classes are to be managed as entities, use:
如果您想更好地控制将哪些类作为实体进行管理,请使用:
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
and
和
<class>YOUR CLASS CANNONICAL NAME</class>
<class>YOUR CLASS CANNONICAL NAME</class>