【发布时间】:2020-07-15 23:29:54
【问题描述】:
我为我的系统创建了一些报告,该报告由许多表组成。为此,我创建了一个带有 @Entity 注释的 Domain 类并实现了一个 JpaRepository 存储库,我正在使用带有 @Query 的本机查询,如下所示。
我的问题是hibernate正在为每个域类创建一个表,我该如何停止它?
我的域类:
@Entity
@Immutable
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@IdClass(WidgetDailyReportCompositeKey.class)
public class WidgetDailyReportDomain{
@Id
@Column(updatable = false, insertable = false)
private UUID id_construction;
@Id
@Column(updatable = false, insertable = false)
private String name;
@Id
@Column(updatable = false, insertable = false)
private Date dt_cost;
@Column(updatable = false, insertable = false)
private Double total;
}
我的仓库:
public interface WidgetRepository extends JpaRepository<WidgetDailyReportDomain, UUID>{
@Query(value = " SELECT ct.id AS id_construction, " +
" ct.name, " +
" sm.dt_service AS dt_cost, " +
" sum(smi.nu_value * stiv.amount) AS total " +
" FROM service_measurement sm " +
" INNER JOIN service_measurement_item smi ON smi.id_service_measurement = sm.id " +
" INNER JOIN service s ON s.id = sm.id_service " +
" INNER JOIN service_type_item_service stiv ON stiv.id_service = sm.id_service " +
" AND stiv.id_service_type_item = smi.id_service_item " +
" INNER JOIN construction ct ON ct.id = s.id_construction " +
" WHERE s.id_construction IN ( " +
" select s.id_construction " +
" from service_measurement sm " +
" INNER JOIN service_measurement_item smi ON smi.id_service_measurement = sm.id " +
" INNER JOIN service s ON s.id = sm.id_service " +
" INNER JOIN service_type_item_service stiv ON stiv.id_service = sm.id_service " +
" AND stiv.id_service_type_item = smi.id_service_item " +
" INNER JOIN construction ct on ct.id = s.id_construction " +
" WHERE sm.dt_service BETWEEN :minDate AND :maxDate " +
" GROUP BY s.id_construction " +
" ORDER BY sum(smi.nu_value * stiv.value) DESC " +
" limit :limit " +
" ) " +
" AND sm.dt_service BETWEEN :minDate AND :maxDate " +
" GROUP BY ct.id, sm.dt_service " +
" HAVING sum(smi.nu_value * stiv.amount) > 0 " +
" ORDER BY sm.dt_service;", nativeQuery = true)
List<WidgetDailyReportDomain> findTopExpensiveConstruction(@Param("minDate") Date minDate, @Param("maxDate") Date maxDate, @Param("limit") int limit);
//....
【问题讨论】:
标签: java hibernate jpa spring-data-jpa spring-data