代码之家  ›  专栏  ›  技术社区  ›  Frans Henskens

Hibernate分页ORA-00918:列定义不明确

  •  0
  • Frans Henskens  · 技术社区  · 7 年前

    当hibernate尝试对使用以下hbm生成的实体分页时。xml,它抛出了定义不明确的列。

    <class lazy="false" dynamic-update="true" optimistic-lock="all" table="A" name="org.package.Entity">
      <cache usage="read-write"/>
      <id unsaved-value="null" type="java.lang.Long" name="aId">
        <column name="ID_A" not-null="true" sql-type="java.lang.Long"/>
        <generator class="org.package.Entity"/>
      </id>
      <property type="java.lang.Long" name="aGroupId" not-null="true">
        <column name="ID_GROUP" not-null="true" sql-type="java.lang.Long"/>
      </property>
      <property type="java.lang.String" name="statusCode" not-null="true">
        <column name="CD_STATUS" not-null="true" sql-type="char(30)" length="30"/>
      </property>
      <property type="java.lang.Long" name="templateId" not-null="false">
        <column name="ID_TEMPLATE" not-null="false" sql-type="java.lang.Long"/>
      </property>
    
      <many-to-one name="aGroup" cascade="none" column="Id_Group" 
          class="org.package.Entity"
          insert="false" update="false"/>
      <many-to-one name="template" cascade="none" column="ID_TEMPLATE" 
          class="org.package.Entity"
          insert="false" update="false"/>
    </class>
    

    此实体定义有何错误?

    编辑:将其转换为QandA格式。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Frans Henskens    7 年前

    ID\u模板正在压缩为查询中的一列,ID\u组没有。

    Hibernate使用直接字符串比较来查看两个属性是否依赖于同一列。这区分大小写,因此第二次选择ID\u组作为ID\u组。

    将案例更改为匹配,这很有效。

    <class lazy="false" dynamic-update="true" optimistic-lock="all" table="A" name="org.package.Entity">
      <cache usage="read-write"/>
      <id unsaved-value="null" type="java.lang.Long" name="aId">
        <column name="ID_A" not-null="true" sql-type="java.lang.Long"/>
        <generator class="org.package.Entity"/>
      </id>
      <property type="java.lang.Long" name="aGroupId" not-null="true">
        <column name="ID_GROUP" not-null="true" sql-type="java.lang.Long"/>
      </property>
      <property type="java.lang.String" name="statusCode" not-null="true">
        <column name="CD_STATUS" not-null="true" sql-type="char(30)" length="30"/>
      </property>
      <property type="java.lang.Long" name="templateId" not-null="false">
        <column name="ID_TEMPLATE" not-null="false" sql-type="java.lang.Long"/>
      </property>
    
      <many-to-one name="aGroup" cascade="none" column="ID_GROUP" 
          class="org.package.Entity"
          insert="false" update="false"/>
      <many-to-one name="template" cascade="none" column="ID_TEMPLATE" 
          class="org.package.Entity"
          insert="false" update="false"/>
    </class>
    

    维护旧代码很有趣。希望这对别人有帮助。