【问题标题】:JPA in clause in query查询中的 JPA in 子句
【发布时间】:2017-11-01 11:48:38
【问题描述】:

我有一个包含数据列表的类 Api:

public class Api {
    private String id;

    @ManyToMany
    private List<Data> datas; 
}

我有一个 ApiRepository 扩展 crud 存储库,我在其中定义了一个查询:

@Query(value="select api from Api api where :data in (api.datas)")
public List<Api> getDatas(@Param("data") data)

执行查询时出现此错误:

org.springframework.dao.InvalidDataAccessResourceUsageException: 无法提取结果集; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException:无法提取 ResultSet] 有根本原因

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 MariaDB 服务器版本,用于在第 1 行的 '))' 附近使用正确的语法

【问题讨论】:

  • 如果您使用的是 log4j,请启用以下属性,这将帮助您打印 SQL。所以你找到语法错​​误的地方。log4j.logger.org.hibernate.SQL=DEBUG

标签: java mysql jpa


【解决方案1】:

您必须从查询中删除使用括号 (api.datas)

@Query(value="select api from Api api where :data in api.datas")

如果您有多个值,您可以使用括号,例如:

select api from Api api where :data in ('value1', 'value2', 'value3')

【讨论】:

    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多