【问题标题】:JPA: Query an embeddable List inside an entityJPA:查询实体内的可嵌入列表
【发布时间】:2012-02-26 14:23:39
【问题描述】:

我正在尝试根据某些标准从实体中的列表中“提取”可嵌入类。在 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);

我只想从特定 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].

【问题讨论】:

    标签: java jpa jpql criteria-api embeddable


    【解决方案1】:

    您必须加入 PostalCarrier。您无法访问集合中的属性。因此,postalcarrier.area 不正确。

    select postalcarrier from PostOffice p
    inner join p.carriers postalcarrier
    where p.id = :postOfficeId
    and postalcarrier.area.code = :areaCode
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多