2017-09-27 10 views
1

私は以下のようなエンティティを持っています。私はAEntityのIDを使用してCEntityからCIDのリストを取得する必要があります。春のデータJPA多数取得多数

私はAEntity - > ABMapping - > BEntity - > CEntityからCIDを取得する必要があります。

JPAでこれを達成する方法はありますか、4つのテーブルをすべて結合してネイティブクエリの方法でCEntityからCIDを取得する必要がありますか?

エンティティA

@Entity 
public class AEntity { 

@Id 
private long id; 

@ManyToMany 
@JoinTable(name = "ABMapping", joinColumns = @JoinColumn(name = "AEntity_ref", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "BEntity_ref", referencedColumnName = "id")) 
private List<BEntity> bEntities = new ArrayList<>(); 

} 

エンティティB

@Entity 
public class BEntity { 

@Id 
private long id; 

private CEntity cEntity; 

@ManyToMany(mappedBy = "bEntities") 
private List<AEntity> aEntities; 

@ManyToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "cEntityId") 
public CEntity getCEntity() { 
    return cEntity; 
    } 
} 

エンティティABMapping

@Entity 
public class ABMapping { 

@Id 
private long id; 

@Column(name="AEntity_ref") 
private long ARefId; 

@Column(name = "BEntity_ref") 
private long BRefId; 

} 

エンティティC

@Entity 
public class CEntity { 

@Id 
private long id; 

private String CID; 

private List<BEntity> bEntity; 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "c", cascade = 
CascadeType.ALL) 
public List<BEntity> getBEntities() { 
    return bEntity; 
} 

@Column(name = "CID_column") 
public String getCId() { 
    return CID; 
} 

public void setCId(String CID) { 
    this.CID = CID; 
} 

} 
+0

何を試しましたか? jpa経由で可能です –

+0

なぜABマッピングエンティティをお持ちですか?それは役に立たず(多対多の関連付けに使用される結合テーブルと同じテーブルにマップされるので問題があります)。それは言った:anythigを試してみましたか? JPQLのドキュメントを読んだことはありますか? –

+0

@MaciejKowalski私はBentitiesを取得するためにCrudRepositoryを拡張するAEntityRepositoryでこれを試しましたが、BentityからCEntityを取得する方法は不明です。リスト findBEntitiesByAEntityId(long Id); – jusermar10

答えて

0

ニジェットが提案した@JBと一緒に行きました。

select distinct c from AEntity a join a.bEntities b join b.cEntity c where a.id = :id 
関連する問題