在Hibernate中使用native-sql - 如何处理结果

时间:2011-11-04 02:47:28

标签: hibernate

我有几个表,我不能使用hibernate映射来定义关联(或者我不知道如何做它们)..所以我决定在尝试查询连接结果时使用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,deactivatedate,id,userId,userRole,last_Login,days_Elapsed)

并尝试将列表转换为..

列出dummyList = Listqry.list();

但这不起作用..当我尝试从dummyList访问DummyObject时,我得到的casr对象不能用于DummyObject异常。

2 个答案:

答案 0 :(得分:8)

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

或者,如果您愿意,您可以自己操纵每行的Object []数组。如果您事先知道数据类型,则可以使用字符串,整数等

我经常这样做:

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

答案 1 :(得分: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));
相关问题