Hibernate使用原生SQL多表查询时字段名相同导致查询数据覆盖问题解决办法

724次浏览

系统测试环境:

MySQL 5.0

Hibernate 3.3




由于使用了hibernate,虽然使用原生SQL绕过了hibernate自己的封装,但是还是有些影响,比如字段别名问题;相同的字段名经过hibernate查询会出现前一列覆盖后一列的情况,这时可以用

session.createSQLQuery(sql) .addEntity("表1别名",实体1.class).addEntity("表2别名",实体2.class);

方法来将表的别名和实体类联系起来,这个方法指定了SQL查询字符串,要返回的实体。如果有多张表则以此类推。

SQL语句

select {表1别名.*}, {表2别名.*} from question {表1别名} left join answer {表2别名}  on {表2别名}.id={表1别名}.ansId

取“表1”的值用list.get(0)来获取,具体字段则用表1对应的实体类的属性来取值,表2的值用list.get(1)来获取,具体字段同上。


注:

如果报

    [org.hibernate.type.IntegerType] - <could not read column value from result set: id10_0_; Column 'id10_0_' not found.>

等类似错误,说明SQL语句有错或者没有使用addEntity()方法。


如果您觉得本文对您的学习或工作有所帮助,您可以打开支付宝,对我的博客进行赞助:
我的支付宝
如果您觉得仍有疑问 OR 发现我的博客中有不正确或侵权的内容,您可以打开手机QQ扫描下面的二维码,联系我本人(备注请注明来自博客):
我的QQ