系统测试环境:
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()方法。