【问题标题】:Using native-sql in Hibernate - how to handle results在 Hibernate 中使用 native-sql - 如何处理结果
【发布时间】:2011-11-04 16:58:22
【问题描述】:

我有几个表,我不能使用休眠映射来定义关联(或者我不知道怎么做)..所以我决定在尝试查询连接结果时使用 nativesql..查询是像这样的..

 String sql = "SELECT p.lastName, p.firstName, p.middleName, p.deactivateDate, p.id, p.userId, p.userRole, TO_CHAR(MAX(au.timestamp),'MM/DD/YYYY') as \"last_Login\", ROUND(SYSDATE-MAX(au.timestamp))as \"days_Elapsed\" 
              FROM LLPersonnel p LEFT OUTER JOIN LoginAudit au ON p.userId = au.userAccount AND UPPER(au.operation) = 'SUCCESS'" 
              WHERE p.deactivateDate is null AND p.userRole is not null GROUP BY p.lastName, p.firstName, p.middleName, p.deactivateDate, p.id, p.netId, p.llRole" 
              ORDER BY 1, 2, 3";

    SQLQuery qry = sessionFactory.getCurrentSession().createSQLQuery(sql);
            qry.list();

问题是 qry.list() 返回对象数组,我似乎无法将其转换为任何其他对象。我的意思是我用这样的构造函数创建了一个虚拟对象..

DummyObject(lastName, firstName, middleName, deactivateate,id,userId,userRole,last_Login, days_Elapsed)

并尝试将列表转换为..

List dummyList = Listqry.list();

但这不起作用..当我尝试从 dummyList 访问 DummyObject 时,我得到 cannot casr object to DummyObject 异常。

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    该代码应返回一个 Object[] 列表。您可以创建一个类并调用 .addEntity() ,它会为您填充实体。

    或者,如果您愿意,您可以自己操作每一行的 Object[] 数组。如果你事先知道数据类型,你可以对字符串、整数等进行大小写。

    我经常这样做:

    List<Object[]> list = (List<Object []>) q.list();
    for (Object[] row : list) {
        String lastName = (String) row[0];
        ...
    }
    

    【讨论】:

    • 感谢 Norman.. 我采用了第二种方法.. 像魔术一样工作!
    • 确实感谢诺曼。如此简单,我会因为永无止境的愚蠢而将头撞到门上...... :-O 谢谢老兄!你救了我。
    【解决方案2】:

    你可以这样使用

    java.util.List temp = hibernateTemplate.find(
                    "select u from User u where  u.username='" + username + "'");
    
          //  Client postClient = new Client();
          //  postClient.UsernameAsssertion("http://", username);
    
            if (temp.size() > 0) {
                return assembler.buildUserFromUserEntity((User) temp.get(0));
    

    【讨论】:

      猜你喜欢
      • 2016-10-11
      • 2011-02-06
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 2013-09-28
      • 1970-01-01
      相关资源
      最近更新 更多