Hibernate 在java中,我在获取列表时获取ClassCastExceptin,因为返回的是非托管实体

Hibernate 在java中,我在获取列表时获取ClassCastExceptin,因为返回的是非托管实体,hibernate,Hibernate,当我使用foreach循环进行迭代时,我得到ClassCast异常。我不知道为什么 public List<MailData> getAllMailData() { String strqry="select c.created_time as created_time, c.hangup_time as hangup_time, c.direction as direction , c.sip_endpoint_disposition as sip_endpoint_d

当我使用foreach循环进行迭代时,我得到ClassCast异常。我不知道为什么

public List<MailData> getAllMailData() {
 String strqry="select c.created_time as created_time, c.hangup_time as hangup_time, c.direction as direction ,
     c.sip_endpoint_disposition as sip_endpoint_disposition, v.cid_number as cid_number, v.in_folder as in_folder, 
     v.message_len as message_len,v.read_flags as read_flags, v.username as username from onyxcxm_db.cdr c  
     inner join onyxcxm_db.mail_msgs v on c.orig_id=v.uuid";    

 List<MailData> listMailData = (List<MailData>)getSession().createNativeQuery(strqry).list();

   for(MailData md:listMailData){
    System.out.println(md.getcreated_time);  //line 44
       }
        getSession().flush();
    return listvoiceMailData;   
}
和错误一样

严重:Servlet[dispatcher]的Servlet.service在上下文中与 路径[/hello]引发异常[请求处理失败;嵌套 异常为java.lang.ClassCastException:[Ljava.lang.Object;无法 使用根本原因强制转换到com.my.models.MailData] java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为 com.my.models.MailData位于 java:44 在sun.reflect.NativeMethodAccessorImpl.invoke0Native方法中 有人能解决吗?谢谢


最后,我使用查询得到了解决方案:

Query query = getSession().createSQLQuery(strqry)  
             .addScalar("created_time", new StringType())      
             .addScalar("hangup_time", new StringType())  
             .addScalar("direction", new StringType())      
             .addScalar("sip_endpoint_disposition", new StringType())  
             .addScalar("cid_number", new StringType())      
             .addScalar("in_folder", new StringType())  
             .addScalar("read_flags", new StringType())      
             .addScalar("username", new StringType())  
             .addScalar("username", new StringType())  
             .setResultTransformer(Transformers.aliasToBean(MailData.class));

     List<MailData> listMailData = query.getResultList();

不使用addScalar,您可以执行以下操作:

List<MailData> listMailData = getSession().createSQLQuery(strqry)
.addEntity(MailData.class)
.list();

感谢,addEntity也是一个很好的解决方案。新的AddScalar在Hibernate 5中被删除了。list也被删除了。您可以将其更新为.getResultList。