2016-05-09 21 views
0

Hier mein Code:Hibernate tun, um eine Projektion des Grafen alias

class A{ 
    Integer id 
    String name 
    Set<B> bs; 

    //Getters and setters 
} 

class B{ 
    Integer id; 
    A a; 

    //Getters and setters 
} 

ich tun muss eine konsultieren alle Zeilen von A zu erhalten, und für jede Zeile muss hoy viele B Bezug auf A.

wissen

ich habe SQL-Abfrage, aber ich weiß nicht, wie es in Java

Simplificated Abfrage mit Hibernate tun:

select 
    a.ID as y0_, 
    (select count(*) from 
     B b 
     where b.c47=a.ID 
     and b.FDL='N' 
     ) as count, 
from 
    A a 
inner join 
    C c 
     on a.operario=c.ID 
where 
    a.DID=2 
    and a.FDL='N' 

Dank im Voraus

Antwort

0
@Entity 
@Table(name = "a_table") 
class A 
{ 
    @Id 
    @GeneratedValue 
    Integer id; 

    @Column 
    String name; 

    @OneToMany(mappedBy = "a") 
    Set<B> bs; 

    //Getters and setters 
} 

@Entity 
@Table(name = "b_table") 
class B 
{ 
    @Id 
    @GeneratedValue 
    Integer id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "a_id") 
    A a; 

    //Getters and setters 
} 

Die HQL:

select a.id, count(bs) 
from A a 
left join a.bs bs 
inner join a.c c 
where 
    a.id = 2 
    and a.FDL='N' 
    and bs.FDL='N' 
+0

Ja, meine Klassen wie diese sind, aber der Einfachheit halber entferne ich alle Attribute und Anmerkungen. Nur ich kann mit HQL tun? Kann ich Kriterien verwenden? – hlastras

+0

Ich vermute, dass es möglich ist, es mit Kriterien zu tun, aber ich bin nicht so vertraut damit. Ich denke, es ist für eine andere Frage :) – aviad