精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||
---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||
发表时间:2007-04-17
惟一外键关键的情况(many-to-one):我用了二个这样的例子进行测试
环境:Oracle8i,Hibernate3.1.3 2张表都是三个字段,然后进行对象查询 2种情况的映射文件都是相似的,只是属性具体名称稍有不同
xml 代码
这个是因为什么呢? 这二种情况下的语句都能执行,也不影响最后取出来的结果。 大家知道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, 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||
返回顶楼 | |||||||||
发表时间:2007-04-17
没看明白
你还是二种分开写吧.把代码贴完整点 |
|||||||||
返回顶楼 | |||||||||
发表时间:2007-04-17
谢谢关注我的帖子。
具体情况如下: A.Test_User(n)--(1)Test_Www 字段gzzh是外键,对应Test_Www的主键 B.Ndzjxx(n)--(1)User 字段sqr是外键,对应User的主键 --------------------------- 就是分别对Test_User和Ndzjxx进行最简单的查询 Criteria.forClass(XXXX.class) criteria.list(); 就是这个操作hibernate生成的sql语句如上,但是Ndzjxx的查询多出来了一个字段 |
|||||||||
返回顶楼 | |||||||||
发表时间:2007-04-17
你可真行,难道没发现sqr是SQR的小写吗?
肯定是你两个地方写的不一样,产生这样的现象就不奇怪了。 |
|||||||||
返回顶楼 | |||||||||
发表时间:2007-04-17
多谢janh提醒。我测试了一下终于发现:
xml 代码
select this_.id as id2_0_, this_.gzzh as gzzh2_0_, this_.www as www2_0_ from test_user this_ 如果将 <column name="gzzh" length="20" /> 改为 <column name="GZZH" length="20" /> sql将变为 select this_.id as id2_0_, this_.GZZH as gzzh2_0_, this_.www as www2_0_ from test_user this_ 但是many-to-one的column如果大小写和外键那个属性的大小写不一样的话,hibernate生成的sql就会出现我B情况下的一个大写的GZZH,一个小写的gzzh 二个字段,从而出现了这个隐含的现象。 在本地已经测试过了,看到console出现的sql我终于可以控制住这个多出来的小尾巴了。happy... 我的hibernate映射文件一般都是由工具生成的,而数据库的字段不管大小写都不会影响操作,所以我从不曾注意到这种细节,的确让我想象不到问题原因如此的简单。 Thanks. |
|||||||||
返回顶楼 | |||||||||
浏览 5119 次