2012-02-04 18 views
3

エンティティのリストからいくつかの基準に基づいて埋め込み可能なクラスを "抽出"しようとしています。 JPQLまたはCriteria APIの助けを借りて私はこれでプロではないので、私を助けてください。何の結果も出さずに答えが得られたのは4時間だった。JPA:エンティティ内の埋め込みリストを照会する

これらはクラスである:

@Entity 
public class PostOffice { 

    @Id 
    private Long id; 

    @ElementCollection(fetch=FetchType.LAZY) 
    @CollectionTable([email protected](name = "CARRIERID")) 
    private List<PostalCarrier> carriers; 

} 


@Embeddable 
public class PostalCarrier { 

    @JoinColumn(name = "area") 
    private Area area; 

} 


@Entity 
public class Area { 

    @Id 
    private int code; 
} 

だから、基本的に私は何を達成しようとしているが、このようなものです。

TypedQuery<PostalCarrier> query = entityManager.createQuery("SELECT p.carriers FROM PostOffice p 
WHERE p.id = ?1 AND p.carriers.area.code = ?2", PostalCarrier.class); 

    query.setParameter(1, postOfficeId); 
    query.setParameter(2, areaCode); 

私は、特定のポストオフィスから特定のエリアコードでPostalCarriersのリストを取得したいです。 ご迷惑をおかけして申し訳ありません。 :)


私はほとんどそこだと思いますが、次のエラーを取得しておいてください。

Error compiling the query [SELECT h FROM PostOffice p INNER JOIN p.carriers h 
WHERE p.id = ?1 AND h.area.code = ?2], line 1, column 71: unknown state or 
association field [area] of class [com.test.PostalCarrier]. 

答えて

1

あなたはPostalCarrierに加入しなければなりません。コレクションからプロパティにアクセスすることはできません。したがって、postalcarrier.areaは正しくありません。

select postalcarrier from PostOffice p 
inner join p.carriers postalcarrier 
where p.id = :postOfficeId 
and postalcarrier.area.code = :areaCode 
関連する問題