【发布时间】:2016-09-30 20:51:30
【问题描述】:
我正在使用 Spring Boot/MVC。 我有一个使用 JpaRepository 的自定义查询:
public interface WorkOrderRepository extends JpaRepository<WorkOrder, Integer> {
@Query(value = "SELECT * FROM (SELECT * FROM workorder) Sub1 INNER JOIN (SELECT wo_number, GROUP_CONCAT(service_type SEPARATOR ', ') AS 'service_types' FROM service_type GROUP BY wo_number) Sub2 ON Sub1.wo_number=Sub2.wo_number WHERE fleet_company_id=?1 AND (order_status='On-Bidding' OR order_status='Draft')", nativeQuery = true)
Collection<WorkOrder> findWorkOrdersByFleet(Long fleetCompanyID);
}
它返回下表:
你可以看到它有 service_types 列,这是 Concat 的结果,它不是实体类的一部分。我的问题是如何获得该列的值。有人说我可以使用单独的 DTO 来映射 service_types 列?或者我可以使用“新”关键字?也许你对我有其他的工作。我也尝试过创建一个临时列 service_types 但它没有用。
这是我的实体类:
@Entity
@Table(name="workorder")
public class WorkOrder {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="wo_number")
private Long woNumber;
@ManyToOne(optional=false, cascade=CascadeType.ALL)
@JoinColumn(name = "vehicle_id")
private Vehicle vehicle;
@ManyToOne(optional=false, cascade=CascadeType.ALL)
@JoinColumn(name = "fleet_company_id")
private FleetCompany fleetCompany;
@Column(name="order_title")
private String orderTitle;
@Column(name="order_date")
private String orderDate;
@Column(name="order_time")
private String orderTime;
@Column(name="order_status")
private String orderStatus;
@Column(name="ref_number")
private String refNumber;
@Column(name="proposals")
private int proposals;
//@Column(name="serviceTypes")
@Transient
private int serviceTypes;
public WorkOrder() {
super();
}
public Long getWoNumber() {
return woNumber;
}
public void setWoNumber(Long woNumber) {
this.woNumber = woNumber;
}
public String getOrderTitle() {
return orderTitle;
}
public void setOrderTitle(String orderTitle) {
this.orderTitle = orderTitle;
}
public String getOrderDate() {
return orderDate;
}
public void setOrderDate(String orderDate) {
this.orderDate = orderDate;
}
public String getOrderTime() {
return orderTime;
}
public void setOrderTime(String orderTime) {
this.orderTime = orderTime;
}
public String getOrderStatus() {
return orderStatus;
}
public void setOrderStatus(String orderStatus) {
this.orderStatus = orderStatus;
}
public String getRefNumber() {
return refNumber;
}
public void setRefNumber(String refNumber) {
this.refNumber = refNumber;
}
public int getProposals() {
return proposals;
}
public void setProposals(int proposals) {
this.proposals = proposals;
}
public Vehicle getVehicle() {
return vehicle;
}
public void setVehicle(Vehicle vehicle) {
this.vehicle = vehicle;
}
public FleetCompany getFleetCompany() {
return fleetCompany;
}
public void setFleetCompany(FleetCompany fleetCompany) {
this.fleetCompany = fleetCompany;
}
public int getServiceTypes() {
return serviceTypes;
}
public void setServiceTypes(int serviceTypes) {
this.serviceTypes = serviceTypes;
}
}
有人让我做一个 DTO:
public class WorkOrderDTO extends WorkOrder {
private String service_types;
public WorkOrderDTO() {
super();
}
public WorkOrderDTO(String service_types) {
this.service_types = service_types;
}
public String getService_types() {
return service_types;
}
public void setService_types(String service_types) {
this.service_types = service_types;
}
}
并将仓库从 WorkOrder 替换为 WorkOrderDTO。
public interface WorkOrderRepository extends JpaRepository<WorkOrderDTO, Integer>
但是当我这样做时,我遇到了自动装配问题。
【问题讨论】:
-
你真的打算每 8 小时问一次同样的问题吗?
-
当您听取这些“一些”说“使用 DTO”的建议时,发生了什么?并且不要说“它不起作用”,因为如果没有关于发生了什么的信息,该声明将完全没有意义。
-
@NeilStockton 我编辑了我的帖子以添加发生的事情。我基本上遇到了自动装配问题。
-
@M.Deinum 感谢您推动我解决自己的问题。
标签: java hibernate spring-mvc jpa spring-data-jpa