hibernate 查询数据库问题 楼主最好这个List获取数据库值时候是在service里或者dao里面,然后在action里面获取list这样将两处代码有效率分离出来,一是方便维护,二是良好性能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假如说你只用到了hibernate的话,那么就用Iterator迭代这个List吧Iterator iterator=logs.iterator();while(iterator.hasNext()){ System.out.println((ConsumeLogs)iterator.next());}此建议供楼主参考! 这段程序正常情况就一条sql,我的疑问1.你是如何监听sql的2.hql内容3.基础配置,尤其是加载,抓取方面4.有没有对象关联 顶4楼。毫无疑问,有延迟加载的情况。请贴出你的hql语句及ConsumeLogs的配置。 但是,为什么当我再循环logs,并得到log的属性时,程序会再次执行sql去查询数据库? 将___.hbm.xml文件中lazy属性设为false,懒加载只会在当你实际要用数据的时候才会执行相应的SQL语句,将数据放到SESSION缓存中,但是会执行11天SQL语句的话,那么你的HQL语句该贴出来,或者不看下那个batch属性的设置为多大?如果有关联有其他表/域的话,那么建议使用迫切左外连接,这样就改没有问题了 首先,谢谢楼上各位给的建议。我的ConsumeLogs就是一个独立的表,里面并没有关联关系。下面是我程序action中的一段代码String hql11 = "from ConsumeLogs c where c.adId =" + a.getId(); List<ConsumeLogs> logs = consumeLogsService.getConsumeLogsByHql(hql11);//这方法是向服务层或者数据访问层传入一条sql。 for (ConsumeLogs log : logs) { //现在的疑问是,每当这个循环执行一次,就会去访问一次数据库。(因为我的myeclipse里一直打印sql) if (log.getPlayerType().trim().equals("click")) { System.out.println("number2=" + number2); number2++; } else { System.out.println("number=" + number); number++; } }<prop key="hibernate.jdbc.batch_size">30</prop><prop key="hibernate.show_sql">true</prop>希望大伙能继续给予帮助,谢谢。 多看看Hibernate的延迟加载策略吧。你搜索出来的结果集只是些代理类对象,里面只有一些简单信息,但包括你记录的主键值。当你需要用这些对象的时候(调用getter或setter方法,或者其他),Hibernate才会去根据你记录的主键去实例化这个对象(根据主键从数据库里再搜索一遍)。 能把打印出来的sql贴出来吗,我很难想象这些sql是什么样子的,很难想象,因为是单表,难道去where id根本不可能这样去select因为它并不知道这些id 不错@~!楼主把hql语句贴出来看看就知道是什么问题了!~! 调用find的时候,会调用hibernate内部的session.createQuery(hql).list()方法而list方法,在没有配置二级查询缓存的时候,是直接去数据库获取数据如果配置了二级缓存的查询缓存,list会先去查询缓存寻找,找到了在根据缓存中的id,一条一条的去class缓存load,如果没有,就一条一条的去数据库中load spring mvc后台获取页面级联主键 问下大家都在用什么操作系统 socket 接收文件 死锁 【在线等】 weblogic 下部署 struts 1.3 关于hibernate中悲观锁LockMode.UPGRADE无效问题 hibernate list() 空指针 【讨论】评评孙卫琴出的3本书,参与人人有分,人多再开贴,散分咯~~~~~~~~~ J2EE的入门问题,散散分了 TCS 招聘会 JavaSSM框架+maven+tk.MyBatis 涉及到DataSource时,到底是个什么原理啊? strust2中convert and validate.
while(iterator.hasNext())
{
System.out.println((ConsumeLogs)iterator.next());
}此建议供楼主参考!
我的疑问
1.你是如何监听sql的
2.hql内容
3.基础配置,尤其是加载,抓取方面
4.有没有对象关联
请贴出你的hql语句及ConsumeLogs的配置。
如果有关联有其他表/域的话,那么建议使用迫切左外连接,这样就改没有问题了
我的ConsumeLogs就是一个独立的表,里面并没有关联关系。下面是我程序action中的一段代码String hql11 = "from ConsumeLogs c where c.adId =" + a.getId();
List<ConsumeLogs> logs = consumeLogsService.getConsumeLogsByHql(hql11);//这方法是向服务层或者数据访问层传入一条sql。
for (ConsumeLogs log : logs) { //现在的疑问是,每当这个循环执行一次,就会去访问一次数据库。(因为我的myeclipse里一直打印sql)
if (log.getPlayerType().trim().equals("click")) {
System.out.println("number2=" + number2);
number2++;
} else {
System.out.println("number=" + number);
number++;
}
}<prop key="hibernate.jdbc.batch_size">30</prop>
<prop key="hibernate.show_sql">true</prop>
希望大伙能继续给予帮助,谢谢。
因为它并不知道这些id