Select json 列使用 MemSql 的 JPA 本机查询

Select json column using JPA native query with MemSql

我在 MemSql 数据库中有一个 table,其中包含 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> 并返回相同的结果。

我什至尝试不指定列表元素的类型,return 只是一个列表,结果仍然相同。

我怎样才能得到整个 JSON 这个问题的根本原因是什么?

您需要使用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/

这里

Reading JSON from MEMSQL

对于使用 EntityManager/HibernateSession 的常见情况,custom Hibernate Type is necessary.

我将建议另一种方法 - 您可以将列检索为字符串,因此不需要 Hibernate 来理解任何关于 JSON:

Query q = entityManager.createNativeQuery("select tweet :> text from tweets_json");

这是将 JSON 字段类型转换为 text,一种字符串数据类型(您也可以根据需要使用 varchar 或其他任何类型)。

无论哪种方式返回的结果都是相同的(只是一个字符串),但是这样 Hibernate 应该能够理解它是一个字符串。

这对我有用。

在本机 sql 查询中使用 CAST(tweet as CHAR(1000)) 进行类型转换 json

Query q = entityManager.createNativeQuery("select CAST(tweet as CHAR(1000)) from tweets_json");

这将 return 你的 char[] 数组可以转换为 String 并且可以进一步使用。