frisk_zhou 2009-08-19 09:32
浏览 206
已采纳

Hibernate查询优化

最近做了一个小东东,给财务专门处理数据的。但是数据量太大,连接表太多,导致性能不佳。所以想优化hibernate代码。
我有一个POJO是这样的。
ProfCostcenter.class:
[code="java"]

private Long id;
private ProfCreatnew profCreatnew;
private String costCenterno;
private String deptName;
private String deptHead;
private String division;
private String location;
private Short status;
private Short pass;
private Set ProfConstcentertotals= new HashSet(0);
private Set profAccounts = new HashSet(0);
private Set profGroupTotals = new HashSet(0);
.............get set方法[/code]
对应的hbm.xml是这样的:
[code="java"]

















































[/code]
请注意里面有好几个为lazy="false"。
因为我有的时候需要这样查询。
但是,不是所有的时候都要去查询,有的时候我仅仅需要根据ID查询
ProfCostcenter.class 的一个对象,
但这个时候每次都去查找与之相关联的其他表的数据,但我不想这样,可我 又不能去更改为lazy="true"。
请问我如何处理?如何写代码。
[b]问题补充:[/b]
我是这样写的,但是居然还是执行了很多条语句。
[code="java"]
String sql="select * from whirlpool.dbo.prof_costcenter c where c.id=?";
Query q=this.getSession().createSQLQuery(sql).addEntity(ProfCostcenter.class);
q.setString(0, costcenterId);
q.setMaxResults(1);
ProfCostcenter costcenter=(ProfCostcenter) q.uniqueResult();
[/code]

是我写的不对还是有什么问题?
[b]问题补充:[/b]
[code="java"]
Hibernate: select top 1 * from prof_costcenter c where c.id=?
java.lang.ClassCastException: [Ljava.lang.Object;
at com.profplan.controller.service.impl.FillProfPlanServiceImpl.getProfplan(FillProfPlanServiceImpl.java:72)
at com.profplan.controller.action.FillProfPlanAction.createProfPlan(FillProfPlanAction.java:26)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[/code]
[b]问题补充:[/b]
Sorry,最开始的写法是这样的,后来出错了,我就换了。
[code="java"]
List listc=q.list();

ProfCostcenter costcenter=(ProfCostcenter) listc.get(0);
[/code]
这个对吗?但还是报错哦。类型转化错误,跟上面一样。

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-08-20 11:13
    关注

    晕,
    是这样写

    String sql="select * from whirlpool.dbo.prof_costcenter c where c.id=?";
    Query q=this.getSession().createSQLQuery(sql).addEntity(ProfCostcenter.class);
    q.setString(0, costcenterId);
    q.setMaxResults(1);
    Object[] costcenter= (Object[])q.uniqueResult();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试