2015-02-09 10 views
5

Ich habe drei Entitäten: EntityA, EntityB und EntityC. Von diesen Entitäten muss ich Wert aus der Joining Query in eine Liste von Objekten mithilfe von Federdaten jpa erhalten. Query ist:Wie Objekte aus mehreren Entitäten zurückgegeben werden, indem Sie mithilfe von Federdaten jpa zusammenfügen?

select x.id,x.formNo,x.name, z.testScore, y.semester 
    from EntityA as x left join EntityB as z on x.id = z.a_id 
    inner join EntityC as y on x.c_id = y.id where x.id=1 

Die Einheiten sind:

Entität A:

@Entity 
    public class EntityA {   
    @Id 
    @GeneratedValue 
    private Integer id;   
    private String name;   
    private String formNo; 

    @OneToOne(mappedBy = "a",fetch=FetchType.LAZY, cascade = CascadeType.REMOVE)  
    private EntityB b; 

    @ManyToOne 
    @JoinColumn(name = "EntityC_id") 
    private EntityC c; 
} 

Entität B:

@Entity 
public class EntityB { 

@Id 
@GeneratedValue 
private Integer id;  
private double testScore; 

@OneToOne 
@JoinColumn(name = "EntityA_id") 
private EntityA a; 
} 

EntityC:

@Entity 
public class EntityC { 
@Id 
@GeneratedValue 
private Integer id;  
private String semester; 

@OneToMany(mappedBy = "c",fetch=FetchType.LAZY, cascade = CascadeType.REMOVE) 
private List<EntityA> a;  
} 

Ich habe wie diese

versucht
@Repository 
public interface SomeObjectRepository extends JpaRepository<Object, Integer>{ 
public final static String FIND_WITH_QUERY 
    = "select x.id,x.formNo,x.name, z.testScore, y.semester 
    from EntityA as x left join EntityB as z on x.id = z.a_id 
    inner join EntityC as y on x.c_id = y.id where x.id=:id"; 

    @Query(FIND_WITH_QUERY) 
    public List<Object> getObjects(@Param("id") String id); 
    } 
+2

sein so einfach Was ist die Frage? Was hast du probiert? –

Antwort

1

Sie müssen nur erkennen, dass JPQL eine andere Sprache aus, SQL, und es zu lernen. JPQL verwendet niemals Tabellen- und Spaltennamen. JPQL-Joins basieren auf Zuordnungen zwischen Entitäten und nicht auf einer ON-Klausel.

Die Abfrage sollte

select x.id,x.formNo,x.name, z.testScore, y.semester 
from EntityA x 
left join x.b z 
inner join x.c y 
where x.id = :id 
Verwandte Themen