java - JPA:查询实体内的可嵌入列表

标签 java jpa jpql criteria-api embeddable

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

最佳答案

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

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

关于java - JPA:查询实体内的可嵌入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137610/

相关文章:

java - 监视所有正在运行和生成的 JVM

java - 使用 ORDER BY 传递到 URL 的用于排序的自定义参数

java - 使用Java对密文进行密码分析

java - (为什么)Tomcat/Java 在 Linux 上比在 Windows 上表现更好?

java - maven-2 可以帮助我创建 Java 客户端-服务器应用程序吗?

用于 Java 8 java.time.Instant 的 Hibernate @Temporal

java - 序列生成器: JAVA/JPA/SPRING

java - Jpa 从表单输入创建 native 查询

java - oneToMany 关系中的 HQL 查询

使用 jpalq 查询将 Java DTO 放入列表中