Java SE上的JPA:对象:entity.Customer@5e80188f不是已知的实体类型

我跟着

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

在Java SE环境中测试JPA。 在Eclipse中,我:

  • 创建了一个新的JPA(2.1)项目;
  • 在options-> JPA-> Persistent class management中,我选择了“自动发现带注释的类”而不是“必须在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  elements or a global false 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中

                 

项目目录树

 $ 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 

所有clases代码与http://glassfish.dev.java.net/javaee5/persistence/JPASE.zip上的示例文件相同

persistence.xml缺少下一行:

 false 

此行的位置如下例所示:

    org.eclipse.persistence.jpa.PersistenceProvider false           

还有另一个选项,类似于Paul Vargas提供的选项,也编辑了persistence.xml文件。

如果您想要更多地控制将哪些类作为实体进行管理,请使用:

true

YOUR CLASS CANNONICAL NAME