使用Hibernate 如何把多个表的数据查询到一个POJO

http://blog.csdn.net/yangqicong/article/details/6910740
看了你这篇文章后,有一个疑问.

如果写SQL把 A B 表关联,查询出A 表全部字段和B表一个字段 别名为A 表里一个不被hibernate 创建到数据库表的字段,
也就是说查询出的字段都和A POJO 字段一一对应.
那么我怎么把查询结果放到A POJO 去呢?

然后发现可以尝试

 query.setResultTransformer(Transformers.aliasToBean(SM_Power.class));

但是这样写又有新问题,MYSQL 没有Long类型,但是POJO 里面有,然后hibernate就会报错.

query.addScalar("id", Hibernate.LONG);

这样指定了就不会类型错误,但是这样只能查询出一个字段,如果很多个字段那不就搞死人了.

所以以上总结后有2个方案.
1 有没有除了代码1块 的处理结果的其他方法
2 有没有和代码2块 功能相反的方法,除了指定的其他的按照 代码块1的执行转换.
不知道你们是怎么处理的,因为才接触hibernate ,所以请大伙能给个更好的方法.

该回答引用ChatGPT

首先,您可以使用HQL或者SQL语句来查询两个表的数据,然后使用setResultTransformer方法将查询结果转换为POJO。


关于第一个问题,您可以通过创建一个包含多个字段的类(例如ResultClass)来存储查询结果,然后再将ResultClass转换为POJO。

例如:

public class ResultClass {
    private Long id;
    private String field1;
    private String field2;
    ...

    // Getters and setters
}

Query query = session.createSQLQuery("SELECT A.id as id, A.field1 as field1, B.field2 as field2 FROM A, B WHERE A.id = B.id");
query.setResultTransformer(Transformers.aliasToBean(ResultClass.class));
List<ResultClass> results = query.list();

for (ResultClass result : results) {
    SM_Power smPower = new SM_Power();
    smPower.setId(result.getId());
    smPower.setField1(result.getField1());
    ...

    // Convert ResultClass to SM_Power POJO
}

关于第二个问题,您可以在创建查询语句之前使用addScalar方法来指定每一个字段的数据类型,以避免类型错误。

例如:

Query query = session.createSQLQuery("SELECT A.id as id, A.field1 as field1, B.field2 as field2 FROM A, B WHERE A.id = B.id");
query.addScalar("id", Hibernate.LONG);
query.addScalar("field1", Hibernate.STRING);
query.addScalar("field2", Hibernate.STRING);
query.setResultTransformer(Transformers.aliasToBean(SM_Power.class));
List<SM_Power> results = query.list();