2015-02-09 5 views
5

Ho tre entità: EntityA, EntityB e EntityC. Da quelle entità ho bisogno di ottenere il valore dalla domanda di partecipazione in un elenco di oggetti utilizzando i dati di primavera jpa. Query è:Come restituire oggetti da più entità unendole utilizzando i dati di primavera 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 

Le entità sono:

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

Ho cercato in questo modo

@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

Qual è la domanda? Che cosa hai provato? –

risposta

1

Hai solo bisogno di rendersi conto che JPQL è una lingua diversa da SQL, e imparare. JPQL non usa mai nomi di tabelle e colonne. I join di JPQL si basano su associazioni tra entità e non su una clausola ON.

La query dovrebbe quindi essere semplicemente

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