Spring Data Jpa 获取没有实体表示的数据

Spring Data Jpa to get data which doesn't have entity representation

我正在尝试找到将我的数据映射到 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 注释并执行此操作还是以某种方式为设备和设备表创建实体,然后使用 JPQL/HQL 在查询中连接表,但我应该如何映射结果??

提前致谢。

您可以使用 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 class 可能喜欢以下内容:

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

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

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

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();