2016-04-14 7 views
0
public class Category { 
     private String id; 
     private String name; 
     private Category parent; 
     private Collection<Category> children; 

//setters and getters... 
} 

SQL Query:Zuordnen einer Unterabfrage Werk/CTE Hierarchie Ergebnis auf einer Java-Klasse

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]; 
     ... 
    } 
} 

Irgendwelche Ideen, wie man richtig als List<Object[]>-List<Category> den angegebenen Wert Ergebnis abzubilden? Vielleicht gibt es dafür eine Hibernate-Funktion?

Antwort

0

Nun, wenn Sie einen übergeordneten Datensatz, und viele Kinder Aufzeichnungen, könnten Sie so etwas wie dieses machen:

from Category cat 
left join fetch cat.parent p 

und stellen Sie die Beziehung

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

Legen Sie Ihre Attribut in der Klasse als a

List<Category> children; 

nicht Sammlung. Sie werden die gewünschten Objekttypen haben.

Ich hoffe, es hilft Ihnen