2015-02-09 26 views
5

Mam trzy podmioty: EntityA, EntityB i EntityC. Z tych obiektów należy pobrać wartość z Łączącego zapytania do listy obiektów przy użyciu danych sprężynowych jpa. Zapytanie jest:Jak zwrócić obiekty z wielu obiektów, łącząc się przy użyciu danych sprężynowych jpa?

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 

Podmioty są:

EntityA:

@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; 
} 

EntityB:

@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;  
} 

Próbowałem jak ten

@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

Jakie jest pytanie? Co próbujesz? –

Odpowiedz

1

wystarczy uświadomić sobie, że JPQL jest inny język z SQL, i nauczyć się go. JPQL nigdy nie używa nazw tabel i kolumn. Połączenia JPQL polegają na skojarzeniach między jednostkami, a nie na klauzuli ON.

Kwerenda powinna więc być po prostu

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 
Powiązane problemy