我刚学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个字段全部给缓存到内存了?
解决方案 »
- SSH求大神解决怎么在JSP里能输出数据库里的内容
- java 字符串转为日期
- 求 介绍规范开发java项目的电子书 或 完整java项目开发文档。 要有详细设计,编码,单体测试用例相关内容。越小越好。 最好是struts2的,最好是中文的。明天加到200分。
- 问一下,JAVA方向和大型机哪个发展方向好呢
- Java中的反射机制???
- WebService与SOAP怎么结合起来?
- websphere , 怎么用程序读取已发布在war包里的一个文件?
- eclipse怎么查看jsp生成的class文件
- 发布webservice遇到Selection must be WSDL怎样解决
- 谁知道com.sun.xml.parser包在哪能下载的到
- tomcat启动时出现的异常, 在线等求助..
- 如何用Java程序向DLL程序发出通信消息呢?
比如
select new XX(id,title) from XX
XX为你的对象类名,需要有(id,title)的构造函数,
这样,就可以了,而不再是,直接select xx from XX xx了
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
}
这样你那其余的98个大字段就不会被查询缓存了!
哦忘了说 我测试用的hibernate版本是3.6.1的。 在使用setResultTransformer前你需要查看下你使用的hibernate版本是否支持这种方式。
对,这样返回的是对象,但是需要建立构造函数。
如果是select id,title from table_name 返回的是数组而不是对象,