【问题标题】:Spring Data Jpa to get data which doesn't have entity representationSpring Data Jpa 获取没有实体表示的数据
【发布时间】:2021-06-08 10:56:44
【问题描述】:

我正在努力寻找将我的数据映射到 ORM 上的最佳方式。我有一个查询,它从 MySQL 数据库中获取数据,看起来像

SELECT d.ID AS Id,
    equipment.EQUIP_ID,
    equipment.EQUIP_REFERENCE
FROM
    tbl_devices d
        INNER JOIN
   tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID
 

使用 Spring 引导和 Spring 数据获取这些数据的最佳方式是什么?

我应该使用@Query 注释并执行此操作,还是以某种方式为 Equipment 和 Devices 表创建实体,然后使用 JPQL/HQL 在查询中连接表,但是我应该如何映射结果??

提前致谢。

【问题讨论】:

    标签: java sql spring-boot orm spring-data-jpa


    【解决方案1】:

    你可以使用JdbcTemplate(从org.springframework.jdbc.core.JdbcTemplate导入)来运行上面你写的SQL语句。在您可以创建一个 pojo 以通过BeanPropertyRowMapper 将结果映射到其中之后。例如:

    final String sql = "SELECT d.ID AS Id, equipment.EQUIP_ID, equipment.EQUIP_REFERENCE FROM tbl_devices d INNER JOIN tbl_equipment equipment ON equipment.EQUIP_ID = d.DEV_ID";
    YourPojo result = jdbcTemplate.query(
        sql,
        new BeanPropertyRowMapper<>(YourPojo.class)
    ); 
    

    Pojo 类可能如下:

    @Data
    public class YourPojo {
        private Long id;
        private Long equipId;
        private Your_type equip_reference_name;
    }
    

    【讨论】:

      【解决方案2】:

      一个快速而肮脏的解决方案是使用投影。

      首先,你创建一个投影界面:

      public interface DeviceDetails {
      
          Long getId();
      
          Long getEquipId();
      
          String getEquipReference();
      
      } 
      

      然后您修改查询以将列别名与投影属性匹配:

      SELECT d.ID AS id, 
          equipment.EQUIP_ID as equipId
          equipment.EQUIP_REFERENCE As equipReference
      ...
      

      最后,您将查询方法放入您选择的存储库中:

      @Query(value =..., nativeQuery = true) 
      List<DeviceDetails> findDeviceDetails();
      

      【讨论】:

        猜你喜欢
        • 2021-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        • 2014-10-17
        • 1970-01-01
        • 2016-01-20
        • 2015-09-11
        相关资源
        最近更新 更多