[英]Select json column using JPA native query with MemSql
我在MemSql
數據庫中有一個表,其中包含一個JSON
類型的列。
我正在嘗試執行以下查詢。
select tweet from tweets_json;
tweet
列是JSON
列。
這是我用來執行此查詢的代碼。
public List<String> getTweets(){
Query q = entityManager.createNativeQuery("select tweet from tweets_json");
List<String> resultList = query.getResultList();
}
我期望結果是一個字符串列表和每個字符串來表示 JSON。
問題是我將字符串轉換為單個Character
對象,該對象僅包含 JSON {
的第一個字符。
無論我使用的列表項是什么類型,結果始終是一個帶有左大括號符號的字符列表。
我嘗試使用List<Object[]>
、 List<String[]>
、 List<Object>
、 List<JsonElement>
並且都返回相同的結果。
我什至試圖不指定列表元素的類型,只返回一個列表,結果仍然相同。
如何獲取整個 JSON 以及此問題的根本原因是什么?
這對我有用。
在原生 sql 查詢中使用CAST(tweet as CHAR(1000))
來對 json 進行類型轉換
Query q = entityManager.createNativeQuery("select CAST(tweet as CHAR(1000)) from tweets_json");
這將返回char[]
數組,該數組可以轉換為String
並可以進一步使用。
您需要使用 JSON_EXTRACT_STRING 函數。
select JSON_EXTRACT_STRING(tweet,0) from tweets_json;
確切的函數定義是:
JSON_EXTRACT_<type>(json, keypath)
您可以在此處找到示例: https : //docs.memsql.com/sql-reference/v6.7/json_extract_type/
和這里
對於使用EntityManager
/ HibernateSession
的常見情況,需要自定義 Hibernate Type 。
我將建議一種替代方法 - 您可以將列作為字符串檢索,從而不需要 Hibernate 來了解有關 JSON 的任何內容:
Query q = entityManager.createNativeQuery("select tweet :> text from tweets_json");
這就是將 JSON 字段類型轉換為text
,一種字符串數據類型(您也可以根據需要使用 varchar 或任何類型)。
無論哪種方式返回的結果都是相同的(只是一個字符串),但是這樣 Hibernate 應該能夠理解它是一個字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.