2016-05-31 27 views
1

我有一個倉儲類:春天開機自動裝配的問題:不是託管類型

public interface WorkOrderRepository extends JpaRepository<WorkOrderDTO, 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')") 
Collection<WorkOrderDTO> findWorkOrdersByFleet(Long fleetCompanyID); 

@Query(value = "SELECT * FROM workorder WHERE fleet_company_id=?1") 
Collection<WorkOrderDTO> findWorkOrdersByFleet1(Long fleetCompanyID); 
} 

以及實體類:

@Entity 
@Table(name="workorder") 
public class WorkOrder implements Serializable { 
@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; 

@Transient 
private String 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 String getServiceTypes() { 
    return serviceTypes; 
} 


public void setServiceTypes(String serviceTypes) { 
    this.serviceTypes = serviceTypes; 
} 



} 

,我有一個擴展實體類是POJO:

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; 
} 


} 

我想通過POJO WorkOrderDTOJpaRepository而不是它的實體爲ma p列service_types它不是實體類的一部分。但是當我設置WorkOrderDTO而不是WorkOrder時,我遇到了自動裝配問題。也許,這是一些註釋問題。我沒有對POJO做任何註釋。

+0

您只能映射實體,因爲異常告訴您「WorkOrderDTO」不是實體,因此不起作用。 –

+0

@M。 Deinum這裏的一些用戶告訴我,如果不是,我可以做到這一點。如何獲得不屬於使用百里香葉顯示的實體的列? – Lester

+0

我沒有說你不能這樣做,你不能像你現在所做的那樣去做。我強烈建議閱讀JPA如何工作以及如何查詢返回自定義結果。 –

回答

0

您可以使用「新」運算符。您必須使用您需要的值在WorkOrderDTO中創建構造函數,例如

public WorkOrderDTO(String serviceTypes) { 
    this.service_types = serviceTypes; 
} 

那麼您可以在一個JPQL使用這樣的 - 查詢:

@Query(value = "SELECT new your.package.WorkorderDTO(w.<select servicetypes somehow>) FROM workorder w WHERE fleet_company_id=?1") 

不過,我覺得你的第一個查詢混亂,我認爲這應該是本機查詢...有你不能使用「新」操作符。

也許您可能將ServiceType(如Vehicle或FleetCompany)映射爲List?然後你可以連接你的DTO列表中的值。

編輯:你可以使用@OneToMany來映射一個List,因爲它可能在WorkOrder的Vehicle類中,只是爲了闡明我以前的段落。

+0

我應該擴展JpaRepository 還是擴展JpaRepository ? – Lester

+0

使用JpaRepository

+0

問題是我需要的是第一個查詢,因爲它有服務類型,第二個查詢只有工作。 – Lester