Hibernate SqlQuery
Hibernate SQLQuery sql查询对结果处理方式一:
String sql = "select user_id userId,create_Time createTime from user"; SQLQuery query = session.createSQLQuery(sql); query.setResultTransformer(Transformers.aliasToBean(User.class)); query.addScalar("userId",StandardBasicTypes.INTEGER); query.addScalar("createTime",StandardBasicTypes.TIMESTAMP); List<User> list = query.list();
使用setResultTransfromer可以指定一个类存储一个查询结果,类里面的属性必须和查询结果的字段名称一致,是通过set方法设值的。在较低的hibernate版本里需要使用到
query.addScalar("userId",StandardBasicTypes.INTEGER);
来说明别名的类型(Mysql的一个bug,高版本不会出现这个问题),在使用的JSON-lib,将数据装成JSON时,对于java.util.Date类型(数据库字段类型为dateTime)时,StandardBasicTypes对应的是TIMESTAMP,否则会报
net.sf.json.JSONException: java.lang.reflect.InvocationTargetException ,json-lib不能装换java.sql.Date的数据。类里的时间String会比较好点,Date转换成JSON后格式{"date":27,"day":0,"hours":20,"minutes":41,"month":9,"nanos":0,"seconds":51,"time":1382877711000,"timezoneOffset":-480,"year":113},而String是"testDate":"2013-10-27 20:41:51.0"。 Mysql dateTime与timestamp比较
使用setResultTransfromer好处:类里面的字段不用与数据库关联,在不查与数据库对应的属性时,程序不会报异常。
Hibernate SQLQuery sql查询对结果处理方式二:
String sql = "select * from User"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(User.class);
这种方式要求user类与数据库对应的属性必须都要查出来,否则会报Column xxx(没有查出来的但与数据库有关联的属性) not found.

浙公网安备 33010602011771号