繁体   English   中英

spring data jpa原生查询中基于地图索引的查询

[英]Query based on map index in spring data jpa native query

我有两个实体 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);

在执行时它给出了以下异常

引起:org.springframework.beans.BeanInstantiationException:无法实例化[java.util.List]:工厂方法'loadDataForPartitioner'抛出异常; 嵌套异常是 org.springframework.dao.InvalidDataAccessResourceUsageException:无法准备语句; SQL [/* select a.Id from AAA a where a.status = :status and a.bbbDetails['BBBType.FIRST'].flag= false */ select aaa0_.id as col_0_0_ from aaa aaa0_ cross join bbb_details bbbde1_ where aaa0_ .id=bbbde1_.id 和 bbbde1_.null = 'BBBType.FIRST' 和 aaa0_.status=? 和 bbbde1_.flag=false]; 嵌套异常是 org.hibernate.exception.SQLGrammarException: could not prepare statement ... ... .... ... ; 嵌套异常是 org.hibernate.exception.SQLGrammarException: 无法准备语句

这里的 bbbDetails 是键(BBBType)值(子实体)对的映射。 我应该如何根据数据 jpa 本机查询中的 BBBType 值查询映射的子实体?

使用这样的查询:

select a.Id 
from aaa a 
join a.bbbDetails b on key(b) = BBBType.FIRST
where a.status = :status and b.flag = false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM