在Hibernate中使用本地SQL - 如何处理结果

4

我有几个表格,无法使用Hibernate映射来定义关联(或者我不知道如何做),所以我决定在尝试查询连接结果时使用原生SQL。查询类似于以下内容:

 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, deactivatedate,id,userId,userRole,last_Login, days_Elapsed)
并尝试将列表转换为:
List dummyList = Listqry.list();
但是这行不通。当我尝试从dummyList访问DummyObject时,会出现“无法将对象转换为DummyObject”异常。
2个回答

8
那段代码应该会返回一个Object[]列表。你可以创建一个类并调用.addEntity()方法,它将为你填充实体。
或者,如果你愿意的话,你也可以手动操作每一行的Object[]数组。如果你预先知道数据类型,你可以直接转换字符串、整数等。
我经常这样做:
List<Object[]> list = (List<Object []>) q.list();
for (Object[] row : list) {
    String lastName = (String) row[0];
    ...
}

1
谢谢Norman。我采用了第二种方法,效果神奇! - RKodakandla
确实,谢谢Norman。这么简单的问题,我都要因为无尽的愚蠢而撞墙了... :-O 谢谢老兄!你救了我。 - Lawrence

1

你可以像这样使用

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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接