版本 :3.3.2.GA
我用过很多次的一个 BaseDao 实现的方法:
@Override
public T getBySQL(String sqlString, Object... values) {
Query query = this.getSession().createSQLQuery(sqlString).setCacheable(true);
if (values != null) {
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values[i]);
}
}
return (T) query.uniqueResult();
}
下面的service 层中的代码中报错:
@Override
public boolean signing(SigningPlayer signingPlayer) {
SigningPlayer DBsp = signingPlayerDao.getBySQL("select * from signingplayer where game_id=? and user_id=?",
signingPlayer.getGameId(), signingPlayer.getUserId());
if (DBsp != null) {
return false;
} else {
signingPlayerDao.save(signingPlayer);
return true;
}
}
报错位置:
这个baseDao的实现方法我已经用过很多次了,不知道这里为什么类型强转失败。搞了半天没找到原因。请问怎么解决
本地sql可以映射实体类吗?只能返回List<Object[]>吧?
hql应该是没问题的
回复 @polly:这个方法是我在http://www.cnblogs.com/yinglunstory/p/6090227.html中找到的,他里面就是强转为对应是实体类型,是我使用方式错了,还是这个方法本身是错的呢?第二个问题:我已经把debug的返回的内容贴出来了,我用object接收看到里面像一个数组,用object[]接收会报错。回复 @颖辉小居:你说的还是HQL,如果你执行NativeSql,只能返回List<Object[]>其中,Object[]对应各个字段的值。因为不知道各个字段的类型,因此这里只能是Object的数组,而不能是String[]query.uniqueResult()返回的只有一个object你好,可以debug看看这个对象是什么类型。是个Object你这个是SQL语句,又不是HQL语句,怎么可能会自动封装啊,SQL语句查询返回的是结果集啊
回复 @颖辉小居:hibernate5可以用泛型,少打了个5.。回复 @颖辉小居:hibernate中可以声明泛型了,以前的版本你可以用((SQLQuery)query).addEntity(Entity.class)试试,这个是将原生查询封装成实体的我是在http://www.cnblogs.com/yinglunstory/p/6090227.html找到的,是我用的方式不对还是,这个方法本身是错的啊那请问返回的这个object怎么用呢?
debug,是一个object,里面像是一个数组,直接用Object[]接收会报错,
只能是object,debug object内容如下 :
那么这个怎么从objecto中取得数据呢?
hibernate的sql查询并不能自动封装城对象,sql语句查询返回的是结果集,活着自己重写方法,利用java的反射自己封装城对象; 或者用hql半面向对象查询和Criteria(全面向对象)查询
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。