微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何避免创建多余的实体?

在我当前的项目中,我需要执行一些本机查询,这些查询查询​​中连接的表中选择一些字段,例如:
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”)类“结果”不是可能需要将列映射到对象的实体.
我还尝试在结果类中重复@Column声明.

我的问题是如何声明这一点而不必在我的数据库中创建表示为表格的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]));
}

原文地址:https://www.jb51.cc/java/120469.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐