2015-02-09 14 views
5

Üç varlığım var: EntityA, EntityB ve EntityC. Bu varlıklardan, birleştirme listesinden, yay verileri jpa'yı kullanarak bir nesne listesine değer vermem gerekiyor. Sorgu geçerli:Yay verileri jpa kullanılarak birleştirilerek birden çok varlıktan nesneler nasıl iade edilir?

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 

varlıklardır:

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

Ben sadece JPQL SQL farklı bir dil olduğunu farkeder ve bu öğrenmesi gereken bu

@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

olmalıdır? Ne denedin? –

cevap

1

gibi çalıştık. JPQL asla tablo ve sütun isimlerini kullanmaz. JPQL katılımları, ON maddesinde değil, varlıklar arasındaki ilişkilere dayanır.

sorgu böylece sadece soru nedir

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 
İlgili konular