我有两个实体 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 data 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 值查询映射的子实体?