3

我有两个 Maven 项目,一个称为project-data,另一个称为project-rest,它依赖于project-data项目。

Maven 构建在project-data项目中成功,但在project-rest项目中失败,除了:

Caused by: org.hibernate.DuplicateMappingException: duplicate import: TemplatePageTag refers to both com.thalasoft.learnintouch.data.jpa.domain.TemplatePageTag and com.thalasoft.learnintouch.data.dao.domain.TemplatePageTag (try using auto-import="false")

我可以在这里看到一些解释:http: //isolaso​​ftware.it/2011/10/14/hibernate-and-jpa-error-duplicate-import-try-using-auto-importfalse/

我不明白的是,为什么在构建项目数据项目时不会出现此消息,而在构建项目休息项目时会出现此消息。

我试图在pom.xml文件中查找以查看其中是否有可以解释该问题的内容。

我还查看了在project-rest项目上配置和运行测试的方式。

但我还没有看到任何东西。

4

2 回答 2

11

该错误基本上是由于sessionFactorybean 是两个具有相同逻辑名称TemplatePageTag的实体的基础:

  • 一个位于com.thalasoft.learnintouch.data 下。jpa .domain包。
  • com.thalasoft.learnintouch.data下的其他。.domain .

由于这属于一个不寻常的案例,您将让Hibernate抱怨该案例。主要是因为您在运行一些HQL查询(基本上是面向实体的查询)时可能会遇到最终问题,并且可能会产生不一致的结果。

作为解决方案,您可能需要:

  • 用不同的名称重命名您的Entitybean 以避免混淆,我认为这在您的情况下不是一个合适的解决方案,因为它可能需要大量重构并且会损害您的项目兼容性。

  • 将您的 EJB 实体配置为使用不同的名称进行解析。当您使用基于xml的处理配置一个实体而另一个通过注释配置时,定义实体名称的架构不同:

    • 对于com.thalasoft.learnintouch.data.jpa.domain.TemplatePageTag实体,您需要将name属性添加到@Entity注释中,如下所示:

      @Entity(name = "TemplatePageTag_1")
      public class TemplatePageTag extends AbstractEntity {
        //...
      }
      
    • 对于com.thalasoft.learnintouch.data.dao.domain.TemplatePageTag,因为它是使用 hbm xml 声明映射的,所以您需要将entity-name属性添加到您的class元素,如下所示:

      <hibernate-mapping>
        <class name="com.thalasoft.learnintouch.data.dao.domain.TemplatePageTag"
          table="template_page_tag"
          entity-name="TemplatePageTag_2"
          dynamic-insert="true"
          dynamic-update="true">
      
          <!-- other attributes declaration -->
      
        </class>
      </hibernate-mapping>
      

当我深入了解您的项目结构时,您可能还需要修复其他 bean 的实体名称,因为您一直在为许多其他类遵循相同的模式,例如com.thalasoft.learnintouch.data.jpa.domain.AdminModulecom.thalasoft.learnintouch.data.dao.domain.AdminModule

于 2014-08-10T13:23:20.267 回答
0

这个问题可以通过使用@Entity 和@Table 注释的组合来解决。下面的链接提供了一个很好的解释和两者之间的区别。

name-attribute-in-entity-and-table 之间的区别

于 2019-10-04T06:28:32.020 回答