环境:Oracle8i,Hibernate3.1.3
2张表都是三个字段,然后进行对象查询
2种情况的映射文件都是相似的,只是属性具体名称稍有不同
- <id name="id" type="java.lang.Integer">
- <column name="id" />
- <generator class="assigned" />
- id>
- <property name="gzzh" type="java.lang.String">
- <column name="gzzh" length="20" />
- property>
- <property name="www" type="java.lang.String">
- <column name="www" length="30" />
- property>
- <many-to-one name="wnote" class="test.db.Www" column="gzzh" lazy="false" update="false" insert="false"/>
| 加黑加粗的是man-to-one对应的外键. |
A. | Hibernate: select this_.id as id2_0_, this_.gzzh as gzzh2_0_, this_.www as www2_0_ from test_user this_ |
B | Hibernate: select this_.id as id0_0_, this_.SQR as SQR0_0_, this_.DWDM as DWDM0_0_, this_.sqr as sqr0_0_ from NDZJXX this_ |
| B.看加红的地方,却凭空多出来了一个字段 |
这个是因为什么呢?
这二种情况下的语句都能执行,也不影响最后取出来的结果。
大家知道Criteria的限制结果记录数目的时候 setFirstResult(0).setMaxResults(100)
生成的SQL是形如 select * from ( … ) where rownum <= ?
A情况当然是没有任何问题的。
B情形如下:
select * from ( select this_.id as id0_0_, this_.SQR as SQR0_0_, this_.DWDM as DWDM0_0_, this_.sqr as sqr0_0_ from NDZJXX this_ ) where rownum <= ?
这个时候就有问题了:
ORA-00918: column ambiguously defined
对B情况下使用HQL也是出现同样的问题。
这个让我很疑惑,目前我在B情况下只好规避使用Criteria的限制结果记录数目的操作,改用Native Sql,