我的DAO中有一个hibernate调用,看起来像这样
List<Associate> associate = (List<Associate>)session.createSQLQuery("SELECT * FROM associates WHERE fk_id = :id AND fk_associate_id = (SELECT id FROM users WHERE fk_user_type = 2)").setParameter("id", id).list();
我收到错误消息,说我无法将结果列表强制转换为模型类型Associate。我不明白为什么会这样。我只返回关联表中的字段。
答案 0 :(得分:34)
您需要使用addEntity()
指定结果应转换为的实体类,因为您正在执行对实体一无所知的SQL查询:
List<Associate> associate = (List<Associate>) session.createSQLQuery(
"SELECT * FROM associates WHERE fk_id = :id AND fk_associate_id = (SELECT id FROM users WHERE fk_user_type = 2)")
.addEntity(Associate.class)
.setParameter("id", id).list();
另见:
答案 1 :(得分:0)
可以将 ResultTransformer 应用于本机SQL查询,从而允许其返回非托管实体。
sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
.setResultTransformer(Transformers.aliasToBean(CatDTO.class))
上面的查询将返回已实例化的CatDTO列表,并将NAME和BIRTHNAME的值注入其相应的属性或字段中。
源:Link