Hibernate多表查询

SELECT
	u.id,
        u.username,
        r.name
FROM
	users u,
	rights AS r
WHERE
	u.right_id = r.id


假设SQL是这样的。

我在Hibernate中就需要这样获得查询后的数据。

		Session currentSession = hibernateTemplate.getSessionFactory().getCurrentSession();
		Query query = currentSession.createQuery(sql);
		query.setString(0, id);
		List<Object[]> list =  query.list();
		User user = new User();
		Object[] o = list.get(0);		<pre name="code" class="java">                user .setId((String) o[0]);
		user.setUsername((String) o[1]);
		user.setName((String) o[2]);

 为什么呢?我打断点看到的数据是这样的! 

所以我们得自己拿出来再强制转换。

而Hibernate为什么不能映射呢?我猜是因为我们没有传User.class类似这种参数,他不能反射到相对应的属性名上。

而JdbcTemplate就是这样的。

jdbcTemplate.query(sb.toString(), params, BeanPropertyRowMapper.newInstance(User.class));
我们只需要将SQL语句中的字段昵称改为java中定义的就行。

例如:

SELECT u.right_id rightId FROM users

/* ******************************* 2015年11月20日 11:26:23 ******************************* */

今天看到别人的代码,顿时明白了我之前是多么的逗~

Query query = session.createSQLQuery(sql).addEntity("a", AAA.class).addEntity("f", BBB.class);

之后再进行强制类型转换就OK~

/* ******************************* 2015年12月2日 15:38:22 ******************************* */

上面的代码只能用这种SQL 语句

SELECT a.*,f.* FROM A a, F f


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值