2016-11-11 16 views
2

这里是我的查询,我试图从Job类获得iduserNotes我无法从JPQL中选择特定的列吗?

@Query("SELECT j.id, j.userNotes FROM Job j WHERE j.bookingTime BETWEEN :stDate AND :edDate") 

List<Job> getDriverCalendar(@Param("stDate") Timestamp stDate, @Param("edDate") Timestamp edDate); 

Job.java

package com.housecar.model; 
    import java.math.BigDecimal; 
    import java.sql.Timestamp; 

    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.EntityListeners; 
    import javax.persistence.GeneratedValue; 
    import javax.persistence.GenerationType; 
    import javax.persistence.Id; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.OneToOne; 
    import javax.persistence.Table; 

    import org.springframework.data.jpa.domain.support.AuditingEntityListener; 

    @Entity 
    @EntityListeners(AuditingEntityListener.class) 
    @Table(name = "hc_job") 
    public class Job{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long id; 

    @Column(name = "ride_time") 
    private Timestamp rideTime; 

    @Column(name = "booking_time") 
    private Timestamp bookingTime; 

    @Column(name = "guest_id") 
    private Long guestId; 

    @Column(name = "booked_user_id") 
    private Long bookedUserId; 

    @Column(name = "car_id") 
    private Long carId; 

    @Column(name = "pickup_location") 
    private String pickupLocation; 

    @Column(name = "drop_location") 
    private String dropLocation; 

    @Column(name = "trip_type") 
    private Character tripType; 

    @Column(name = "is_private_job") 
    private Boolean isPrivateJob; 

    @Column(name = "estimated_fare") 
    private BigDecimal estimatedFare; 

    @Column(name = "actual_fare") 
    private BigDecimal actualFare; 

    @Column(name = "tip") 
    private BigDecimal tip; 

    @Column(name = "payment_status") 
    private Character paymentStatus; 

    @Column(name = "user_notes") 
    private String userNotes; 

    @Column(name = "cancellation_notes") 
    private String cancellationNotes; 

    @Column(name = "status") 
    private Character status; 

    @OneToOne 
    @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) 

    private JobDriverRating jobDriverRating; 

    @OneToOne 
    @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false) 

    private JobCostSplit jobCostSplit; 

    public Long getId() { 
    return id; 
    } 

    public void setId(Long id) { 
    this.id = id; 
    } 

    public Long getGuestId() { 
    return guestId; 
    } 

    public void setGuestId(Long guestId) { 
    this.guestId = guestId; 
    } 

    public Long getBookedUserId() { 
    return bookedUserId; 
    } 

    public void setBookedUserId(Long bookedUserId) { 
    this.bookedUserId = bookedUserId; 
    } 

    public Long getCarId() { 
    return carId; 
    } 

    public void setCarId(Long carId) { 
    this.carId = carId; 
    } 

    public String getPickupLocation() { 
    return pickupLocation; 
    } 

    public void setPickupLocation(String pickupLocation) { 
    this.pickupLocation = pickupLocation; 
    } 

    public String getDropLocation() { 
    return dropLocation; 
    } 

    public void setDropLocation(String dropLocation) { 
    this.dropLocation = dropLocation; 
    } 

    public Character getTripType() { 
    return tripType; 
    } 

    public void setTripType(Character tripType) { 
    this.tripType = tripType; 
    } 

    public Boolean getIsPrivateJob() { 
    return isPrivateJob; 
    } 

    public void setIsPrivateJob(Boolean isPrivateJob) { 
    this.isPrivateJob = isPrivateJob; 
    } 

    public BigDecimal getEstimatedFare() { 
    return estimatedFare; 
    } 

    public void setEstimatedFare(BigDecimal estimatedFare) { 
    this.estimatedFare = estimatedFare; 
    } 

    public BigDecimal getActualFare() { 
    return actualFare; 
    } 

    public void setActualFare(BigDecimal actualFare) { 
    this.actualFare = actualFare; 
    } 

    public BigDecimal getTip() { 
    return tip; 
    } 

    public void setTip(BigDecimal tip) { 
    this.tip = tip; 
    } 

    public Character getPaymentStatus() { 
    return paymentStatus; 
    } 

    public void setPaymentStatus(Character paymentStatus) { 
    this.paymentStatus = paymentStatus; 
    } 

    public String getUserNotes() { 
    return userNotes; 
    } 

    public void setUserNotes(String userNotes) { 
    this.userNotes = userNotes; 
    } 

    public String getCancellationNotes() { 
    return cancellationNotes; 
    } 

    public void setCancellationNotes(String cancellationNotes) { 
    this.cancellationNotes = cancellationNotes; 
    } 

    public Character getStatus() { 
    return status; 
    } 

    public void setStatus(Character status) { 
    this.status = status; 
    } 

    public JobDriverRating getJobDriverRating() { 
    return jobDriverRating; 
    } 

    public void setJobDriverRating(JobDriverRating jobDriverRating) { 
    this.jobDriverRating = jobDriverRating; 
    } 

    public Timestamp getRideTime() { 
    return rideTime; 
    } 

    public void setRideTime(Timestamp rideTime) { 
    this.rideTime = rideTime; 
    } 

    public Timestamp getBookingTime() { 
    return bookingTime; 
    } 

    public void setBookingTime(Timestamp bookingTime) { 
    this.bookingTime = bookingTime; 
    } 

    public JobCostSplit getJobCostSplit() { 
    return jobCostSplit; 
    } 

    public void setJobCostSplit(JobCostSplit jobCostSplit) { 
    this.jobCostSplit = jobCostSplit; 
    } 

} 

@Query("SELECT j.id, j.userNotes FROM Job j WHERE j.bookingTime BETWEEN :stDate AND :edDate")该查询返回[ ]

@Query("SELECT j FROM Job j WHERE j.bookingTime BETWEEN :stDate AND :edDate")此查询返回完整的Job对象。

+1

有在你的JPQL –

+1

@NeilStockton:没有左外联合,是的,我改变了这个问题。 – Madhu

+1

问题是Spring数据JPA(你的'@ Query')不是JPA。使用JPA和JPQL,显然你的JPQL是正确的。这正是Spring Data JPA希望你做的事情,以便返回“Object []”......也许该方法不应该返回一个Job!因为结果不是这样。因此标签改变了 –

回答

0

在上面的查询中使用别名为每个值取

你将得到的结果作为HashMap中的列表,以便从List<Job>改变返回类型为List<Map>,如下图所示,

@Query("SELECT j.id as id , j.userNotes as userNotes FROM Job j WHERE j.bookingTime BETWEEN :stDate AND :edDate") 

List<Map> getDriverCalendar(@Param("stDate") Timestamp stDate, @Param("edDate") Timestamp edDate); 
+1

太棒了,非常感谢你,这解决了问题。 – Madhu

2

您的查询不选择作业。它选择两个字段。这样的JPQL查询返回List<Object[]>,其中列表的每个数组都有两个元素。

该方法的返回类型因此应更改为List<Object[]>