据我所知,要从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将参数传递给查询的方式存在冲突。造成此问题的原因是两个操作都使用冒号(:)。
如何解决此问题并按原样执行上一个查询?
答案 0 :(得分:0)
您需要转义冒号,以便JPA不会将其视为需要设置的参数:
select tweet\\:\\:retweeted_status