以下查询仅匹配在select子查询中找到的第一个值,即使所有值都存在匹配SELECT p FROM Profile p WHERE p.id IN (SELECT u.group FROM User u WHERE u.id = ?1)
子查询返回一个逗号分隔的列表,如:1,2,3。查询应返回所有三个子查询select结果的匹配项。有人知道会出什么问题吗?谢谢。
发布于 2010-10-22 04:20:31
无论是在IN还是SQL中,JPQL子句都不能以这种方式工作。
(..)中的值不是“逗号分隔的字符串”,而是一个值列表。这个列表可以按字面意思指定为逗号分隔的字符串,也可以通过子查询生成,就像您的例子一样。也就是说,查询中的条件作为p.id IN ("1,2,3") (而不是p.id IN (1,2,3))工作,因此它不会产生期望的结果。
因此,您不能使用查询语言(JPQL或SQL)的强大功能来编写针对非规范化模式的查询(您的列包含一个值列表,因此它违反了1NF)。如果您在Profile和User之间有多对多关系,请使用中间连接表将其表示为多对多关系。
https://stackoverflow.com/questions/3990815
复制相似问题