2017-09-27 1 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 매핑 엔티티가 있습니까? 그것은 쓸데없고 (many-to-many 연관을 위해 사용 된 조인 테이블과 같은 테이블에 매핑되기 때문에 문제가있다.) 그것은 말했다 : anythig 시도 했습니까. JPQL의 문서를 읽었습니까? –

+0

@MaciejKowalski 나는 Bentities를 얻기 위해 CrudRepository를 확장하는 AEntityRepository에서 이와 같은 것을 시도했지만 Bentity에서 CEntity를 얻는 방법을 확신하지 못했습니다. 목록 findBEntitiesByAEntityId (긴 ID); – jusermar10

답변

0

니제트가 제안한 @JB와 함께갔습니다.