如何使用 jpa 执行本机 memsql 查询 [重复]

Posted

技术标签:

【中文标题】如何使用 jpa 执行本机 memsql 查询 [重复]【英文标题】:How to execute native memsql query using jpa [duplicate] 【发布时间】:2018-10-31 11:55:22 【问题描述】:

据我所知,要从 java 应用程序与 MemSql 交互,我们使用相同的 mysql 连接器。

在我的应用程序中,我需要对 MemSql 数据库表执行查询。该表包含一个 JSON 字段,查询基于 JSON 中的一些字段。

这是一个示例查询

select  tweet::retweeted_status  from  tweet_json_original  where  posted_time > date_sub(current_date(), interval 1 day);

在我的存储库类中,我有一个方法尝试执行前面的查询,如下所示

public List<String> getMissedTweets()
        Query query = em.createNativeQuery(missedTweetsQuery);
        return query.getResultList();
    

执行此方法时,应用程序抛出以下异常

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [:retweeted_status] [tweet::retweeted_status  from  tweet_json_original  where  posted_time > date_sub(current_date(), interval 1 day);]
    at org.hibernate.internal.AbstractQueryImpl.verifyParameters(AbstractQueryImpl.java:391) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.internal.SQLQueryImpl.verifyParameters(SQLQueryImpl.java:179) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:118) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]
    ... 29 common frames omitted

我了解查询 JSON 字段的方式与 JPA 用于将参数传递给查询的方式存在冲突。此问题的原因是这两个操作都使用冒号字符 (:)。

我怎样才能解决这个问题并按原样执行前面的查询?

【问题讨论】:

【参考方案1】:

您需要对冒号进行转义,以便 JPA 不会将它们视为需要设置的参数:

select  tweet\\:\\:retweeted_status

【讨论】:

以上是关于如何使用 jpa 执行本机 memsql 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Spring Boot JPA 执行具有 INTERVAL 子句的本机 SQL 查询?

JPA 本机查询问题

如果在 jpa 中调用本机查询,则正在执行其他查询

JPA/Hibernate 本机查询无法识别参数

使用 @Query JPA 注释将空参数传递给本机查询

用于“选择到 outfile”的 JPA 本机查询