Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Maven &引用;不是已知实体”;日食误差_Maven_Jpa_Weblogic_Eclipselink - Fatal编程技术网

Maven &引用;不是已知实体”;日食误差

Maven &引用;不是已知实体”;日食误差,maven,jpa,weblogic,eclipselink,Maven,Jpa,Weblogic,Eclipselink,当使用EclipseLink(2.0.2)时,我在Weblogic(10.3.3)中看到了一种奇怪的行为 这就是我要做的。我使用Maven编译了一个项目,其中我使用了JPA(1.0.2)。在本项目中,模块“A”依赖于模块“B”。“B”包含一组实体(javax.persistence.Entity)。但是“persistence.xml”位于“A”中,其中注册了“B”的所有实体。“B”作为可选包部署,而“A”通过其清单引用它 部署是成功的,但当我运行应用程序并尝试持久化一个实体时,我在“A”中得到

当使用EclipseLink(2.0.2)时,我在Weblogic(10.3.3)中看到了一种奇怪的行为

这就是我要做的。我使用Maven编译了一个项目,其中我使用了JPA(1.0.2)。在本项目中,模块“A”依赖于模块“B”。“B”包含一组实体(javax.persistence.Entity)。但是“persistence.xml”位于“A”中,其中注册了“B”的所有实体。“B”作为可选包部署,而“A”通过其清单引用它

部署是成功的,但当我运行应用程序并尝试持久化一个实体时,我在“A”中得到了上面的错误

以下操作之一将解决此问题:

  • 重新启动weblogic服务器
  • 更新模块A的POM文件并显式地向模块B添加依赖项。最初,此依赖项不存在,因为模块A中的类接受“对象”,并将其传递给EntityManager(而不是显式地传递给实体类类型)。无论如何,添加此依赖项不会更改JAR文件的清单。它只更新JAR文件META-INF文件夹中的“maven”目录。我认为weblogic根本不关心这个文件夹
我下载了EclipseLinks的源代码并调试了应用程序。出现此问题的原因似乎是“org.eclipse.persistence.internal.sessions.AbstractSession”类中的“描述符”集合字段没有实体的描述符,因此无法将其识别为实体


我估计重启服务器会更新缓存。但是第二个解决方案呢?为什么会这样?weblogic是否知道JAR文件META-INF目录中的“maven”目录?

听起来您的部署没有正确部署B模块


您使用的是容器管理的持久化单元还是应用程序管理的持久化单元?如果您使用的是应用程序管理的持久化单元,则必须在重新部署之前关闭EntityManagerFactory,否则,包含旧类的旧工厂将保留下来。

这听起来并不意味着您的部署正确地部署了B模块


您使用的是容器管理的持久化单元还是应用程序管理的持久化单元?如果您使用的是应用程序管理的持久化单元,则必须在重新部署之前关闭EntityManagerFactory,否则将保留包含旧类的旧工厂。

部署过程中不会出现任何错误。PU是容器管理的。org.eclipse.persistence.jpa.PersistenceProvider XYZDS com.xxx.entities.XyzEntity部署过程中没有任何错误。PU是容器管理的。org.eclipse.persistence.jpa.PersistenceProvider XYZDS com.xxx.entities.XyzEntity