Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;实体名称在持久性单元中必须是唯一的;_Java_Jpa_Netbeans_Glassfish - Fatal编程技术网

Java &引用;实体名称在持久性单元中必须是唯一的;

Java &引用;实体名称在持久性单元中必须是唯一的;,java,jpa,netbeans,glassfish,Java,Jpa,Netbeans,Glassfish,我是GlassFish服务器的新手,遇到了这个问题。我首先将一个模板项目(使用JPA)导入到NetBeans中,该项目运行良好。然后,由于我想修改模板,我创建了项目的一个副本,在NetBeans中关闭了原始项目,取消了第一个项目的部署,然后将新复制的项目导入NetBeans。我更改了包名和持久化单元的名称。然而,当我尝试运行新项目时,我得到了错误 Entity name must be unique in a persistence unit. Entity name [ToDoItem] is

我是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,但没有任何更改

My 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>


我唯一更改的是持久化单元的名称。

这发生在我身上,对我有效的是一个干净的项目,删除了域文件夹中的osgi缓存目录;构建包似乎停留在缓存中,并导致命名冲突


编辑:澄清一下,我在glassfish的干净安装中也遇到了同样的错误,因为我在项目中有旧的.class文件,即使源文件不存在,它们最终还是在干净的域中。

你的persistence.xml文件是什么样子的?当您从模板项目复制文件时,可能忘记了从该文件中删除旧包名下的类?我添加了persistence.xml,没有提到旧包名。但是,即使软件包是一样的,我也不理解这个问题,因为原来的应用程序已经不存在了!在重新部署之前,您是否清理和构建了所有内容?使用@Entity(name=“…”)的不同名称帮助我解决了这个问题。