JPA原生查询获取JSON字段的数据类型返回疑问
问题解答
1. 查询返回的类型
默认情况下,你的JPA原生查询返回的会是字符串形式的JSON,而非JSONObject对象。
原因是JPA本身没有内置机制能自动将数据库的JSON类型字段直接映射为org.json.JSONObject(或其他JSON库的JSONObject)。数据库返回的JSON数据会以字符串形式传递给JPA,不会自动完成序列化/反序列化转换。
2. 返回类型是否需要修改
如果返回的是字符串形式的JSON,必须把方法的返回类型改成String,否则会触发类型转换异常。修改后的方法定义如下:
@Query(value = "select data from Table where id=:id", nativeQuery = true) String findData(@Param("id") String id);
额外补充:如何直接返回JSONObject
如果希望直接得到JSONObject对象,需要额外配置类型转换:
- 自定义JPA属性转换器(
AttributeConverter),实现数据库JSON字符串与JSONObject的双向转换; - 使用支持JSON类型映射的JPA扩展(比如Hibernate的
JsonBinaryType),配合实体类上的类型注解完成自动映射。
内容的提问来源于stack exchange,提问作者Umar
相关产品推荐
相关产品推荐

