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

在Hibernate中使用本机sql-如何处理结果,hibernate,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(

我有两个表,无法使用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()返回对象数组,我似乎无法将其转换为任何其他对象。我的意思是我已经创建了一个具有如下构造函数的虚拟对象

 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();
DummyObject(lastName、firstName、middleName、deactivatedate、id、userId、userRole、上次登录、经过的天数)

并且试着像

List dummyList=Listqry.List()


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

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

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

我经常这样做:

List<Object[]> list = (List<Object []>) q.list();
for (Object[] row : list) {
    String lastName = (String) row[0];
    ...
}
List List=(List)q.List();
对于(对象[]行:列表){
字符串lastName=(字符串)行[0];
...
}
您可以这样使用

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

谢谢你,诺曼。。我采用了第二种方法。。工作就像魔术!确实谢谢你,诺曼。这么简单,我要把我的头撞到门上,走出永无止境的愚蠢…:-哦,谢谢你,伙计!你救了我。