java – 如何避免创建多余的实体?
发布时间:2020-12-14 06:00:36 所属栏目:Java 来源:网络整理
导读:在我当前的项目中,我需要执行一些本机查询,这些查询从查询??中连接的表中选择一些字段,例如: SELECT t1.col1,t2.col5FROM t1JOIN t2 ON t2.id = t1.t2_id 我试着将它们存放在类似的类中 class Result { String t1_col1; String t2_col5;} 运用 Query q = en
在我当前的项目中,我需要执行一些本机查询,这些查询从查询??中连接的表中选择一些字段,例如:
SELECT t1.col1,t2.col5 FROM t1 JOIN t2 ON t2.id = t1.t2_id 我试着将它们存放在类似的类中 class Result { String t1_col1; String t2_col5; } 运用 Query q = entityManager.createNativeQuery( "THE SQL SELECT",Result.class ); JPA现在抱怨(“uknown entity:result”)类“结果”不是可能需要将列映射到对象的实体. 我的问题是如何声明这一点而不必在我的数据库中创建表示为表格的entites? 解决方法
如果您使用JPA / Hibernate执行SQL查询,那么您使用的是错误的工具. Hibernate是一个ORM,你应该将表映射到实体.这就是JPA的重点.我只想执行SQL查询,使用JDBC(例如Spring的JdbcTemplate)
一旦table1和table2映射到实体(让我们调用这些实体T1和T2),您将不再需要这些SQL查询,因为JPQL只能选择实体的某些字段.您的查询可能如下所示(取决于t1和t2之间的关联): select t1.col1,t2.col5 from T1 t1 join t1.t2 t2 你只需要迭代结果(Object []列表)来构建你的结果(这是一个DTO而不是一个映射的实体): List<Object[]> rows = (List<Object[]>) query.list(); List<Result> listOfResults = new ArrayList<Result>(rows.size); for (Object[] row : rows) { listOfResults.add(new Result((String) row[0],(String) row[1])); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |