0

当 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 格式。

4

1 回答 1

0

ID_TEMPLATE 被压缩为查询中的一列, ID_GROUP 不是。

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

更改案例以匹配,它起作用了。

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

维护旧代码很有趣。希望这可以帮助某人。

于 2018-02-14T04:03:08.387 回答