映射的JPA Hibernate JPQL值-子查询返回超过1行
我使用JPA和Hibernate4.3.1作为JPA提供程序。我正在使用JPQL编写查询。当我编写一个JPQL从一个实体中获取值时,这个实体有一个引用另一个表的映射,它失败了。 以下是我的POJO:映射的JPA Hibernate JPQL值-子查询返回超过1行,hibernate,jpa,jpql,Hibernate,Jpa,Jpql,我使用JPA和Hibernate4.3.1作为JPA提供程序。我正在使用JPQL编写查询。当我编写一个JPQL从一个实体中获取值时,这个实体有一个引用另一个表的映射,它失败了。 以下是我的POJO: public class Book { @Id @Column(name="ID", updatable=false, unique=true) private String id; @ElementCollection @MapKeyColu
public class Book {
@Id
@Column(name="ID", updatable=false, unique=true)
private String id;
@ElementCollection
@MapKeyColumn(name="language")
@Column(name="text")
@CollectionTable(name = "BOOK_TITLES")
private Map<String, String> title = Collections.emptyMap();
// other fields
}
但是为此生成的HQL会导致子查询返回超过1行:
select book0_.ID as ID1_0_, ...<other fields>
from my_library.BOOKS book0_ cross join my_library.BOOK_TITLES title1_
where book0_.ID=title1_.Book_ID
and ((select title1_.TEXT from my_library.BOOK_TITLES title1_
where book0_.ID=title1_.Book_ID) in (?))
如果一本书只有一个书名,这个方法就可以了。但是,如果一本书有多个标题,那么这将失败,因为子查询返回多行
我尝试了一种解决方案,其中谈到将VALUEm=:value反转为VALUEm中的:value。但这对我不起作用,它说发现了意外的标记
有没有办法修改JPQL,使我的HQL格式如下:我不想使用Criteria Builder
select book0_.ID as ID1_0_, ...<other fields>
from my_library.BOOKS book0_ cross join my_library.BOOK_TITLES title1_
where book0_.ID=title1_.Book_ID and title1_.TEXT IN (?)
反转VALUE和:VALUE并添加括号应该可以。例:
@Query("select t from Object t join t.names n where :name IN (VALUE(n.map))")
@Query("select t from Object t join t.names n where :name IN (VALUE(n.map))")