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
并且可以进一步使用。
我在 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
并且可以进一步使用。