如何使用 jpa 执行本机 memsql 查询
How to execute native memsql query using jpa
据我所知,要从 java 应用程序与 MemSql 交互,我们使用相同的 MySql 连接器。
在我的应用程序中,我需要对 MemSql 数据库执行查询 table。 table 包含一个 JSON 字段,查询基于 JSON 中的某些字段。
这是一个示例查询
select tweet::retweeted_status from tweet_json_original where posted_time > date_sub(current_date(), interval 1 day);
在我的存储库 class 中,我有一个方法尝试执行之前的查询,如下所示
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 应用程序与 MemSql 交互,我们使用相同的 MySql 连接器。
在我的应用程序中,我需要对 MemSql 数据库执行查询 table。 table 包含一个 JSON 字段,查询基于 JSON 中的某些字段。
这是一个示例查询
select tweet::retweeted_status from tweet_json_original where posted_time > date_sub(current_date(), interval 1 day);
在我的存储库 class 中,我有一个方法尝试执行之前的查询,如下所示
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