java - 如何使用 jpa 执行 native memsql 查询

标签 java mysql hibernate jpa singlestore

据我所知,为了从 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 用于将参数传递给查询的方式存在冲突。导致此问题的原因是两个操作都使用冒号字符 (:)。

如何解决这个问题并按原样执行前面的查询?

最佳答案

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

select  tweet\\:\\:retweeted_status

关于java - 如何使用 jpa 执行 native memsql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082774/

相关文章:

mysql - Golang 映射多结果

java - 全局设置 hibernate 'default-cascade' 属性

java - 具有抽象类的 JPA 实体继承 - ConstrainViolationException

java - 在 Web 服务中使用 htmlunit 时抛出的异常是什么意思?

java - 不存在的错误

mysql:主键的重复项

java - 如何使用 JDBC 将 Java 应用程序连接到 db4free.net?

java - FlushMode.AUTO后面检查了什么?

java - java中的字符串操作

java - 尝试在 Android 上运行时无法处理,索引时出错