簡體   English   中英

使用 JPA 本機查詢和 MemSql 選擇 json 列

[英]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/

和這里

從 MEMSQL 讀取 JSON

對於使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM