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.

posted @ 2013-10-27 21:46  世间安得两全法  阅读(2455)  评论(0)    收藏  举报