容我无知,问个关于hibernate的效率问题 我刚学hibernate,发现用load(class,id)或者get(class,id)方法就可以方便地得到主键是id的对象,这个功能确实比自己拼sql语句,然后在用一大堆getInt什么的要好很多。但是现在有个问题,假设我的表里有100个字段,除id和title字段存储的内容长度很小外,其它98个字段都要占用1M的空间,我需要在一个页面里显示这个表中前30条记录的id和title作为目录和索引,当用户单击对应的title的时候才进入一个页面查看该title所对应的记录的一部分字段(假设是3个字段)。如果我用传统的sql来搞的话就用select id,title from table ……这样的方式来查询以减少不必要的信息对性能带来的影响。那在hibernate里不就要把这30条记录的100个字段全部给缓存到内存了?
------解决方案-------------------- 你这种需求,建议 手写hql 比如 select new XX(id,title) from XX XX为你的对象类名,需要有(id,title)的构造函数, 这样,就可以了,而不再是,直接select xx from XX xx了
------解决方案--------------------
你依然可以通过hibernate使用原生态SQL进行单独字段查询并可将结果封装成bean.只不过此时你的bean中只有你查询的字段,其余未被查询的值都将为空或者默认值。
针对你提出的可以如下编程:
Java code
Query query = session.createSQLQuery("select id,title from table_name").setResultTransformer(Transformers.aliasToBean(Table_Bean.class));
List<Table_Bean> list = query.list();
for(Table_Bean tb:list){
assertNotNull(a.getId());
assertNotNull(a.getTitle());
assertNull(a.getName());
//...so many assert
}
------解决方案--------------------