2012-02-04 48 views
3

我试图根据实体列表中的某些标准“提取”嵌入式类。无论是在JPQL还是Criteria API的帮助下。我不是专业人士,所以请帮助我。一直用Google搜索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); 

我只想从特定的PostOffice获取特定区域代码中的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