当前位置: 首页 > 知识库问答 >
问题:

基于映射索引的Spring数据查询jpa原生查询

白灿
2023-03-14

我有两个实体AAA和BBB,如下所示

class AAA{

  @Id private String Id;

 @OneToMany(mappedBy = "aaa", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
  @MapKey(name = "bbbType")
  @Setter
  private Map<BBBType, BBB> bbbDetails;
  
  private String status;
}

以及BBB实体作为

class BBB {
 @ManyToOne(cascade = CascadeType.ALL)
  @JoinColumn(name = "Id")
  @Setter
  private AAA aaa;

  private BBBType bbbType;  // BBBType is a enum of Strings

  private boolean flag;
}

现在使用spring数据JPA本机查询,我需要一个如下的查询(使用JPARepository)

@Query(
      "select a.Id from aaa a where 
           a.status = :status and a.bbbDetails['BBBType.FIRST'].flag= false")
  List<String> findAllIdsByTypeAndStatus(@Param("status") String status);

当执行时,它会给出以下异常

这里的bbb详细信息是键(BBBType)值(子实体)对的映射。如何根据数据jpa本机查询中的BBBType值查询映射的子实体?

共有1个答案

伯逸明
2023-03-14

使用这样的查询:

select a.Id 
from aaa a 
join a.bbbDetails b on key(b) = BBBType.FIRST
where a.status = :status and b.flag = false
 类似资料:
  • 我有3个实体在我的数据库。实体A具有主密钥PK-A,实体B具有主密钥PK-B,实体C具有主密钥PK-C。 实体A与实体B具有1对多关系,实体B与实体C具有1对多关系 我想在Spring Data JPA中基于PK-A(实际上是实体B中的外键)查询实体C。有可能吗? 但这行不通。还有什么建议我可以试试吗?

  • 我一直在使用多对多映射,这里是我的POJO类。 Menu.java: 使用者爪哇: 我有用户,菜单和第三个映射表这是自动创建的,我成功地得到结果时,在mysql中执行以下查询 我想在Hibernate中写这个查询如何处理这个东西???

  • 问题内容: 我有几个查询,其中大多数是: 和 由于它们都是一个范围,因此在col和date上使用未聚类的b +树索引会是加快查询速度的一个好主意吗?还是哈希索引?还是没有索引会更好? 问题答案: 在 过滤谓词上 用作 日期范围条件 的列上创建 INDEX 应该很有用,因为它将执行 INDEX RANGE SCAN 。 这是有关如何在Oracle中创建,显示和阅读EXPLAIN PLAN 的演示。

  • 我使用的是spring data elasticsearch,当我使用@query注释时,将代码与实际的JSON elasticsearch查询关联起来要容易得多,如本链接参考中的示例所示: https://www.programcreek.com/java-api-examples/index.php?api=org.springframework.data.elasticsearch.anno

  • 但是生成的SQL查询是 正如您所看到的,括号改变了,我相信两个查询中的条件并不相同。是虫子吗?使用hibernate和spring以及postgresql数据库。

  • 在我的遗留应用程序中,我有一个国家表、状态表和一个国家和州的映射表,几乎没有额外的列。 我创建了这样一个实体类。 我的仓库。 我想检查映射表中是否存在状态。以下两种方法都不起作用。 正确的方法是什么?