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