【发布时间】:2018-03-08 14:15:57
【问题描述】:
我在query.getResultList() 遇到了标题错误;在运行本机查询以返回 json 对象时在 JsonbHibernateExampleApplicationTests 类文件上。
返回非json类型的列没有问题。
请提供帮助,如果需要更多信息,请告诉我。
以下是源码
public class JsonbHibernateExampleApplicationTests {
@Autowired
private PersonRepository repository;
@Autowired
private ApplicationContext appContext;
@Test
public void contextLoads() {
EntityManagerFactory entityManagerFactory = (EntityManagerFactory) appContext
.getBean("entityManagerFactory");
EntityManager entityManager = entityManagerFactory.createEntityManager();
String sql = "select additional_data from person";
javax.persistence.Query query = entityManager.createNativeQuery(sql);
query.getResultList();
//List<JsonDataUserType> list = (List<JsonDataUserType>) query.getResultList();
/* System.out.println("list:" + list);
for (JsonDataUserType json: list)
{
System.out.println("json:" + json);
}*/
//List<Object[]> objects = query.getResultList();
//System.out.println("result:"+ objects);
}
}
我在实体中将附加数据列指定为自定义 json 类型
@Type(type = "JsonDataUserType")
private Map<String, String> additionalData;
这里无法粘贴所有源代码,您可以在http://vojtechruzicka.com/postgresqls-jsonb-type-mapping-using-hibernate/查看完整源代码
我只是将原始源代码修改为上面的 URL 以运行原生 SQL 查询。
非常感谢,
【问题讨论】:
-
请同时发布您的“entityManagerFactory”bean。
-
嗨 Fab,我已经检查过了,发现问题是非 json 格式,我不能将 json 自定义类型作为 UUID。见下面@Type(type = "JsonDataUserType") private Map
additionalData; -
嗨 Punit,entityManagerFactory 来自 JDK 8 源代码 javax.persistence.EntityManagerFactory
-
大家好,我找到了一个替代解决方案,我将 additional_data json 数据转换为文本,然后能够获得输出。请参阅下面的代码如果你们有更好的解决方案,请告诉我。可能是 POJO 映射。 String sql = "select CAST(additional_data AS text) from person"; javax.persistence.Query 查询 = entityManager.createNativeQuery(sql);列表
列表 = query.getResultList(); System.out.println("list:" + list); System.out.println("list 0:" + list.get(0));