最近做了一个小东东,给财务专门处理数据的。但是数据量太大,连接表太多,导致性能不佳。所以想优化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]
这个对吗?但还是报错哦。类型转化错误,跟上面一样。