3

エンティティのリストからいくつかの基準に基づいて埋め込み可能なクラスを「抽出」しようとしています。JPQL または Criteria API を使用します。私はこれのプロではないので、助けてください。結果なしで答えを得るために4時間しっかりとグーグルしています。

これらはクラスです:

@Entity
public class PostOffice {

    @Id
    private Long id;

    @ElementCollection(fetch=FetchType.LAZY)
    @CollectionTable(joinColumns=@JoinColumn(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].
4

1 に答える 1

2

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

select postalcarrier from PostOffice p
inner join p.carriers postalcarrier
where p.id = :postOfficeId
and postalcarrier.area.code = :areaCode
于 2012-02-04T07:37:33.783 に答える