我是GlassFish服务器的新手,我遇到了这个问题。我首先将一个模板项目(使用JPA)导入到NetBeans中,该工作正常。然后,由于我想修改模板,我创建了一个项目副本,在NetBeans中关闭了原始项目,取消部署了第一个项目,然后将新复制的项目导入NetBeans。我更改了包名称和持久性单元的名称。但是,当我尝试运行新项目时,我收到错误
Entity name must be unique in a persistence unit. Entity name [ToDoItem] is used for the entity classes [package1.ToDoItem] and [package2.ToDoItem]
这怎么可能? NetBeans中不再存在原始项目,我使用asadmin undeploy命令从GlassFish中显式取消部署它,我甚至尝试删除并重新安装GlassFish,但没有任何更改。
我的persistence.xml如下所示:
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="myserver-unit" transaction-type="JTA">
<jta-data-source/>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="javax.persistence.schema-generation.create-source" value="metadata-then-script"/>
<property name="javax.persistence.schema-generation.drop-source" value="metadata-then-script"/>
<property name="javax.persistence.schema-generation.create-script-source" value="create-script.sql"/>
<property name="javax.persistence.schema-generation.drop-script-source" value="drop-script.sql"/>
<property name="javax.persistence.sql-load-script-source" value="load-script.sql"/>
<property name="eclipselink.logging.level" value="FINEST"/>
</properties>
我唯一改变的是持久性单元的名称。
答案 0 :(得分:0)
这件事发生在我身上,对我有用的是一个干净的项目并删除了域文件夹中的 osgi-cache 目录;似乎构建的包保留在缓存中并导致命名冲突。
编辑:有点澄清,我设法在 glassfish 的干净安装上遇到同样的错误,因为我在项目中有旧的 .class 文件,即使来源不存在,无论如何他们最终都在干净的领域。