【问题标题】:Mapping a subquery factory/CTE hierarchy result set to a Java Class将子查询工厂/CTE 层次结构结果集映射到 Java 类
【发布时间】:2016-08-06 09:42:11
【问题描述】:
public class Category {
      private String id;
      private String name;
      private Category parent;
      private Collection<Category> children;

//setters and getters...
}

SQL 查询:

WITH CATEGORY_LINK(id,name,parent_id) AS (
    SELECT id, name, parent_id from CATEGORY
    WHERE parent_id IS NULL
UNION ALL
    SELECT id, name, parent_id FROM CATEGORY_LINK INNER JOIN CATEGORY ON (CATEGORY_LINK.id = CATEGORY.parent_id)
)
SELECT * FROM CATEGORY_LINK
JAVA:

    {
    ...
    List<Object[]> categoryRawData = sqlQuery.list();
    for(Object[] tuple : categoryRawData){
       String id = tuple[0];
       ...
    }
}

任何想法如何正确地将给定的结果集映射为 List&lt;Object[]&gt;List&lt;Category&gt; ?也许有一个 Hibernate 功能可以做到这一点?

【问题讨论】:

    标签: java sql hibernate mapping common-table-expression


    【解决方案1】:

    好吧,当你有一个父记录和许多子记录时,你可以做这样的事情:

    from Category cat
    left join fetch cat.parent p
    

    并设置关系

    <many-to-one name="parent" class="package.Category" column="CAT_ID" fetch="select" />
    

    将你的类中的属性设置为

    List<Category> children; 
    

    不是收藏。您将拥有所需的对象类型。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多