zhf0601 2013-09-14 16:57 采纳率: 0%
浏览 3133

使用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 ,所以请大伙能给个更好的方法.

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-13 14:45
    关注

    该回答引用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();
    
    评论

报告相同问题?

悬赏问题

  • ¥15 一道python难题
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度