映射的JPA Hibernate JPQL值-子查询返回超过1行

映射的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

我使用JPA和Hibernate4.3.1作为JPA提供程序。我正在使用JPQL编写查询。当我编写一个JPQL从一个实体中获取值时,这个实体有一个引用另一个表的映射,它失败了。 以下是我的POJO:

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))")