0
에 중첩 된 관계로 작업하는 방법을

나는 실체가 :

@Entity 
public class A { 
    @PrimaryKey(autoGenerate = true) 
    public long id; 
    public A() {} 
} 

@Entity() 
public class B { 
    @PrimaryKey @NonNull 
    public String id; 
    public String oneCId; 
    public String anotherCId; 
    public long aId; 
    public B() {} 
} 

@Entity 
public class C { 
    @PrimaryKey @NonNull 
    public String id; 
    public String value; 
    public C() {} 
} 

일부 POJO를 : DAO와

public class AWithB { 
    @Embedded 
    public A a; 

    @Relation(parentColumn = "id", entityColumn = "aId") 
    public List<BWithC> bWithC; 

    public AWithB() {} 
} 

public class BWithC { 
    @Embedded 
    public B b; 
    public C oneC; 
    public C anotherC; 

    public BWithC() {} 
} 

:

@Query("SELECT * FROM a") 
List<AWithB> getAllNow(); 

문제는 @Relation로입니다 엔티티가 아닌 다른 것을 가리킬 수 없으므로 AWithB에 대한 것입니다. 그러나 해당 주체는 다른 주체를 포함 할 수 없습니다. DB에서 전체 구조를 어떻게 반환해야합니까?

답변

1

중첩 된 관계가있을 수 있습니다 (문서 페이지의 Javadoc은 어떤 이유로 든 전체 코드를 표시하지 않고 그 이유 때문에 오도 된 것 같습니다).

그것은 노력하고 있습니다 :

public class AWithB { 
    @Embedded 
    public A a; 

    @Relation(parentColumn = "id", entityColumn = "aId", entity = B.class) 
    public List<BWithC> bWithC; 

    public AWithB() {} 
} 

하나 여전히 @Relation 주석을 사용할 수 많은 관계. 어떤 이유로 간단한 인스턴스를 가질 수 없습니다. 여기에 콜렉션이 필요합니다. 하지만 작동 중입니다 :

public class BWithC { 
    @Embedded 
    public B b; 
    @Relation(parentColumn = "oneCId", entityColumn = "id") 
    public Set<C> oneC; 
    @Relation(parentColumn = "anotherCId", entityColumn = "id") 
    public Set<C> anotherC; 

    public BWithC() {} 
} 
+0

안녕하세요 Andrej, 예를 들어 AwithB로 주문하는 법을 알고 계십니까? –

+0

나는 무엇을 의미하는지 모르겠습니다. A 테이블의 경우 'Order By'문과 함께 일반 쿼리를 사용할 수 있습니다. @Relation에서 가져온 엔티티 목록을 주문하려면 최소한 Java Bean (AWithB :: getBWithCOrdered)의 getter에서 직접해야합니다. –