【问题标题】:Cast Hibernate result to a list of objects将休眠结果转换为对象列表
【发布时间】:2011-02-01 14:59:01
【问题描述】:

我的 DAO 中有一个如下所示的休眠调用

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。我不明白为什么会这样。我只返回 associates 表中的字段。

【问题讨论】:

    标签: java hibernate


    【解决方案1】:

    您需要使用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(); 
    

    另请参阅:

    【讨论】:

    • 这里有什么方法可以使用 DTO 类而不是 Entity 类吗?
    • @Vlad 添加 .addEntity(Associate.class) 会影响性能吗?
    【解决方案2】:

    可以将 ResultTransformer 应用于本机 SQL 查询,允许它返回非托管实体。

    sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS")
            .setResultTransformer(Transformers.aliasToBean(CatDTO.class))
    

    上述查询将返回一个 CatDTO 列表,该列表已被实例化,并将 NAME 和 BIRTHNAME 的值注入到其相应的属性或字段中。

    来源:Link

    【讨论】:

      猜你喜欢
      • 2012-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2013-08-13
      • 2014-12-07
      相关资源
      最近更新 更多