现在的位置: 首页 > 综合 > 正文

hibernate执行原生SQL

2017年12月27日 ⁄ 综合 ⁄ 共 1052字 ⁄ 字号 评论关闭

---Hibernate执行原生SQL
若使用session.save()插入数据,则对象的自增列id在save()后Hibernate内部会自动将其自增赋值;

而若采用执行原生sql的方式insert数据,则id应该自己赋值,Hibernate内部不会再自动赋值。

---Hibernate执行原生sql时返回List<Object[]>的问题

链接:http://www.cnblogs.com/apem/p/3502039.html

//问题如
	HibernateEntityDao entityDao = (HibernateEntityDao) SpringContextUtil.getBean("hedao");
	List<Object[]> userList = entityDao.createSelectQuery(sqlStr);
	for (Object[] obj : userList) {// obj行数据
		System.out.println(obj[1]);
		System.out.println(obj[2]);
	}

解决方案:使用new List()或者new Map()生成查询结果集

//使用List
String query = "select new List(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//[[001, 四川],[002,北京],[001,四川]]


//使用Map,首先不指定alias,则结果的键就按照查询出来的顺序结果,使用0,1来表示key
String query = "select new Map(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//[{1=四川, 0=001},{1=北京, 0=002},{1=四川, 0=001}]


//使用Map,指定alias,则结果中的key则为alias
String query = "select new Map(p.code as code, p.value as value) from Dictionary p";
List list = session.createQuery(query).list();
//[{value=四川, code=001},{value=北京, code=002},{value=四川, code=001}]

---在Hibernate中使用JDBC API:(待补充)

抱歉!评论已关闭.