A11819 2013-06-27 11:53
浏览 296
已采纳

Hibernate速度的问题

[code="java"]
Query query = this.getSession().createQuery("from CameraEntity c where c.cameraId=:cameraId");
query.setString("cameraId", name);
List list = query.list();
if (list.size() > 0) {
CameraEntity entity = list.get(0);
entity.setCameraId(name);
return entity;
} else {
return null;
}
[/code]
使用Hibernate自带的HQL查询和
[code="java"]
Query query = this.getSession().createQuery("select c.id as id,c.storage as storage from CameraEntity c where c.cameraId=:cameraId");
query.setResultTransformer(Transformers.aliasToBean(CameraEntity.class));
query.setString("cameraId", name);
List list = query.list();
if (list.size() > 0) {
CameraEntity entity = list.get(0);
entity.setCameraId(name);
return entity;
} else {
return null;
}
[/code]
这样的写法效率差距非常的大。
在5000次查询中,第一种方式比第二种的允许时间高9倍左右。
但是第一种方式是使用hibernate管理下的,也就是说我对entity进行set之后可以自动更新上数据库,而第二种方式则不会自动更新,需要手动的update才行。
如果没有其他原因,这10倍左右的差距之下。如果不需要更新数据那么我查询是不是只用第二种方式这么写就可以了。
另外:连接部分已经全部设为lazy抓取。

  • 写回答

1条回答

  • jinnianshilongnian 2013-06-27 12:00
    关注

    1、第一种方式的耗时估计是session flush时的update造成的
    可以考虑:
    1.1、StatelessSession
    1.2、session.evict(entity) 从session中移除掉 那么就会变成一个托管对象,更新不会造成update

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件