Java执行SQL原生查询后如何转为字符串/对象列表(无POJO)
解决JPA原生查询返回数组内存地址的问题
问题原因
当使用EntityManager.createNativeQuery("select * from table2")执行原生查询时,JPA默认返回List<Object[]>类型的结果——每个Object[]对应数据库表的一行数据,数组中的每个元素对应该行的一列值。直接打印这个列表时,Java会输出数组的哈希标识(即你看到的[Ljava.lang.Object;@xxx),而非实际数据。
解决方案
1. 将每行数据转为字符串(自定义格式)
遍历结果列表,把每个对象数组的元素拼接成字符串,可自定义分隔符或格式:
protected EntityManager em; Query query = em.createNativeQuery("select * from table2"); List<Object[]> resultRows = query.getResultList(); List<String> stringResult = new ArrayList<>(); for (Object[] row : resultRows) { // 处理null值避免空指针,用竖线分隔列值,可按需修改格式 String rowString = String.join(" | ", Arrays.stream(row) .map(val -> val != null ? val.toString() : "NULL") .toArray(String[]::new)); stringResult.add(rowString); } // 此时stringResult中存储的是每行数据的字符串形式
2. 将数组转为List
相关产品推荐
相关产品推荐

