在使用Hibernate做为持久层做应用的时候,往往需要做关联查询,而Hibernate会将查询的结果以数组的集合的方式返回,接着,我们通过读取数组的集合将数据做显示,这种方便是方便,但是,对数组的操作,总是特别担心数组越界,而对于现在这种面向对象的编程方式来讲,这种实现方式在技术实现来讲显得有点落后。能不能用更好的方式,比如将数组自动地转换成为对象,然后由hibernate返回一个对象的数组回来呢?经过一段时间的尝试,找到了问题的解决办法。
首先,我们需要定义一个显示对象,比如,我显示文章时候只需要用到编号,标题,但我们可以构造一个只有编号和标题的显示对象,如下所示:
package com.gdcn.training.hibernate.valueobject;
/**
* 简单的显示对象 * @author cyz * Create-time : 2006-7-14 20:22:55 */ public class SimpleValueObject {
private String resourceid;
private String title;
public SimpleValueObject() {
super(); } /** * 该构造器为必需的 * @param resourceid * @param title */ public SimpleValueObject(String resourceid, String title) { super(); this.resourceid = resourceid; this.title = title; }
public String getResourceid() {
return resourceid; }
public void setResourceid(String resourceid) {
this.resourceid = resourceid; }
public String getTitle() {
return title; }
public void setTitle(String title) {
this.title = title; } } |
接着,使用它:
/** * 将查询结构构靠一个非VO对象 * @throws Exception */ public void QueryExceptionLogAndResultASValueObject() throws Exception { Session session = HibernateSessionFactory.currentSession(); String hql = "select new com.gdcn.training.hibernate.valueobject.SimpleValueObject(a.resourceid ,a.title) from TExceptionLog as a"; Query query = session.createQuery(hql); Iterator iter = query.iterate(); while(iter.hasNext()){ SimpleValueObject simpleValueObject = (SimpleValueObject)iter.next(); System.out.print("ResourceId = " + simpleValueObject.getResourceid() + " "); System.out.println("Title = " + simpleValueObject.getTitle()); } } |
这种方式的好处有很多,对于项目的分工,对象话都有很大的好处!