Hibernate多表联查时,手动将结果集转化成JSON

今晚踩了一个坑,在此记录一下:

先看数据库,我们一共用3张表:

1、taone:


2、tatwo:


3、tathree:



我们的目标是:


SQL语句:

select a.age,b.name,c.sex 
from taone a,tatwo b,tathree c
where a.id = b.id and b.age = c.age;


Java中用hibernate的代码是:

public static List findbyid() {
		Session session = null;
		Transaction ta = null;
		try {
			session = HibernateSessionFactory.getSession();
			ta = session.beginTransaction();
			String hql = "select a.age,b.name,c.sex ";
			String sql = " from Taone a,Tatwo b,Tathree c "
					+ " where a.id = b.id and b.age = c.age  ";
			Query query = session.createQuery(hql+sql);
			System.out.println("query.list().size()="+query.list().size());
			 List<Object[]> objects = query.list();
			 System.out.println("objects.size()="+objects.size());
			 List<NameBean> mylist = new LinkedList<NameBean>();
			 NameBean ab;
             for(Object[] object:objects){  
            	 System.out.println(object.length);
            	 ab = new NameBean();
               ab.setAge((String) object[0]);
               ab.setName((String)object[1]);
               ab.setSex((String)object[2]);
               mylist.add(ab); 
             }  
			ta.commit();
			System.out.println(new Gson().toJson(mylist));
			return query.list();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			ta.rollback();
			return null;
		}finally {
			if (session!=null) {
				session.close();				
			}
		}
	}


NameBean

public class NameBean {
	String age;
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	String name;
	String sex;
}

打完收工:

[{"age":"11        ","name":"a1        ","sex":"1         "},{"age":"22        ","name":"a2        ","sex":"2         "}]

在线解析一下:

[
    {
        "age": "11        ",
        "name": "a1        ",
        "sex": "1         "
    },
    {
        "age": "22        ",
        "name": "a2        ",
        "sex": "2         "
    }
]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值