hibernate query.uniqueResult() 返回的Object不能强转报错java.lang.ClassCastException 为什么?

颖辉小居 发布于 2017/10/10 17:48
阅读 742
收藏 0

【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”

版本 :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的实现方法我已经用过很多次了,不知道这里为什么类型强转失败。搞了半天没找到原因。请问怎么解决

加载中
0
stonele
stonele

hibernate的sql查询并不能自动封装城对象,sql语句查询返回的是结果集,活着自己重写方法,利用java的反射自己封装城对象;  或者用hql半面向对象查询和Criteria(全面向对象)查询

0
颖辉小居
颖辉小居

debug,是一个object,里面像是一个数组,直接用Object[ ] 接收会报错,

只能是object,debug  object内容如下 :

那么这个怎么从object o 中取得数据呢?

0
笑笑虎Hello
笑笑虎Hello

你这个是SQL语句,又不是HQL语句,怎么可能会自动封装啊,SQL语句查询返回的是结果集啊

笑笑虎Hello
笑笑虎Hello
回复 @颖辉小居 : hibernate5可以用泛型,少打了个5.。
笑笑虎Hello
笑笑虎Hello
回复 @颖辉小居 : hibernate中可以声明泛型了,以前的版本你可以用((SQLQuery) query).addEntity(Entity.class)试试,这个是将原生查询封装成实体的
颖辉小居
颖辉小居
我是在 http://www.cnblogs.com/yinglunstory/p/6090227.html 找到的,是我用的方式不对还是,这个方法本身是错的啊
颖辉小居
颖辉小居
那请问返回的这个object 怎么用呢?
0
UncleBen
UncleBen
你好,可以 debug 看看这个对象是什么类型。
颖辉小居
颖辉小居
是个Object
1
polly
polly

本地sql可以映射实体类吗?只能返回List<Object[]>吧?

hql应该是没问题的

颖辉小居
颖辉小居
回复 @polly : 这个方法是我在http://www.cnblogs.com/yinglunstory/p/6090227.html 中找到的,他里面就是强转为对应是实体类型,是我使用方式错了,还是这个方法本身是错的呢?第二个问题:我已经把debug的返回的内容贴出来了,我用object接收看到里面像一个数组,用object[ ]接收会报错。
polly
polly
回复 @颖辉小居 : 你说的还是HQL,如果你执行NativeSql,只能返回List<Object[]> 其中,Object[] 对应各个字段的值。因为不知道各个字段的类型,因此这里只能是Object的数组,而不能是String[]
颖辉小居
颖辉小居
query.uniqueResult() 返回的只有一个object
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部