首页 > 解决方案 > Hibernate 5迁移:使用错误别名创建的映射实体的查询集合生成异常

问题描述

在将我的 Java 8 项目从 Hibernate 3.x 迁移到 5.4.x 时,我遇到了一个问题。我在这里附上故障 Hibernate 实体的映射:

<class name="it.loginet.petrol.domain.carico.AbstractCarico" where="deleted='false'" abstract="true" table="icarico">
     ............

  <property name="deleted" access="field" not-null="true"/>

   <joined-subclass name="it.loginet.petrol.domain.carico.Carico" dynamic-update="true">
    <key column="id" ></key>
    
    <list name="scarichi" access="field" cascade="all">
      <cache usage="read-write"/>
      <key column="caricoAssociato"/>
      <index column="scaricoIndex"/>
      <one-to-many class="it.loginet.petrol.domain.carico.Scarico"/>
    </list>
    
    ......
    
  </joined-subclass>           

  <joined-subclass name="it.loginet.petrol.domain.carico.Scarico" dynamic-update="true" table="scarico">
    <key column="id" ></key>
    
    <property name="forScaricoRandom" access="field" />
    <property name="pesoOriginaleCaricato" access="field" />
    
    <many-to-one name="caricoAssociato"  class="it.loginet.petrol.domain.carico.Carico" access="field" />
  </joined-subclass>        

我的代码尝试查找标有名称“scarichi”的实体,而不是通过显式 HQL 查询,而是通过访问集合。由 Hibernate 内部形成的结果查询使用错误的别名引用映射实体的字段(“已删除”),而不是父实体“AbstractCarico”的别名,而是使用子实体“Scarico”的别名,一个连接的子类。我在此处附上生成的查询的简化示例,突出查询生成问题的部分:

select scarichi0_.caricoAssociato, .................

Scarichi0_.id = scarichi0_1_.id在Scarichi0_.id =abstractvi1_.carico 和 (abstractvi1_.deleted='false') 左外连接 ViaggioBuonoRC abstractvi1_1_ 上左外连接 ViaggioBuonoRC abstractvi1_1_。 id 左外连接 ViaggioExtrarete abstractvi1_2_ on abstractvi1_.id=abstractvi1_2_.id 左外连接 ViaggioRientro abstractvi1_3_ on abstractvi1_.id=abstractvi1_3_.id 左外连接 ViaggioBettolina abstractvi1_4_ on abstractvi1_.id=abstractvi1_4_.id 左外连接 ViaggioRete abstractvi1_5_ on abstractvi1_.id= abstractvi1_5_.id 哪里(scarichi0_.deleted='false')和scarichi0_.caricoAssociato=?

我是否从实体的 Hibernate 映射中遗漏了一些东西,可以教 Hibernate 使用正确的别名来引用我的属性?

提前感谢您的任何建议:) 莱昂纳多

标签: hibernatejava-8hibernate-mapping

解决方案


推荐阅读