【问题标题】:Please Suggest on Following JPA Query Issue请就以下 JPA 查询问题提出建议
【发布时间】:2019-06-22 09:07:34
【问题描述】:

请帮助了解我如何为这个 MySQL 查询编写 JPA 查询

select car_xid from t_booking where from_date between '06/23/2019' and 
'06/24/2019' 
or to_date between '06/23/2019' and '06/24/2019'  or from_date <  
'06/23/2019' or to_date > '06/24/2019' 

在 MySQL 中,此查询返回 car_xid 为 1;

我有 Booking bean,它映射到 MySQL DB 中的 t_booking 表 以及映射到 MySQL DB 中 t_cars 的 Cars 表

汽车豆:

@Entity
@Table(name="m_cars")
public class Cars {

public Cars() {
}
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="car_pid")
private int carPid;

@Column(name="car_number")
private String carNumer;

@Column(name="car_name")
private String carName;

@Column(name="car_type")
private String carType;

@Column(name="passenger_number")
private int paxNumbers;

@Column(name="available_from")  
private Date availableFrom;

@Column(name="available_to")
private Date availableTo;

@Column(name="rates")
private float ratesPeHour;

@Column(name="deposite")
private float deposite;

@Column(name="is_active")
private char isActive;

@Column(name="from_city")
private String fromCity;

@Column(name="to_city")
private String toCity;

@Column(name="img_url")
private String imgUrl;
}

预订豆:

@Entity
@Table(name="t_booking")
public class Booking {

public Booking() {
}

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="booking_pid")
private int bookingPid;

@OneToOne
@JoinColumn(name="user_xid")
private User user; 

@Column(name="from_city")
private String fromCity;

@Column(name="to_City")
private String toCity;

@Column(name="from_date")
private Date fromDate;

@Column(name="to_date")
private Date toDate;

@Column(name="car_number")
private String carNumber;

@Column(name="deposite")
private float deposite;

@Column(name="passenger_number")
private int paxNumber;

@Column(name="from_loc")
private String fromLoc;

@Column(name="to_loc")
private String toLoc;

@OneToOne
@JoinColumn(name="car_xid")
private Cars cars;

@Column(name="transaction_id")
private String transactionId;

@Column(name="total_amount")
private float totalAmount;

}

我尝试过关注 JPA 查询

public interface BookingRepo extends JpaRepository<Booking, Integer>{

    @Query("select b.cars.carPid from Booking b,Cars car where b.fromDate 
    between ?1 and ?2 or b.toDate between ?3 and ?4 or b.fromDate < ?5 and 
    b.toDate > ?6")
    List<Integer> getBookedCarId(Date fromDate,Date toDate,Date from,Date 
    to,Date frmDate,Date tDate);    
}

这个返回 null 但实际上应该返回 1。

实际结果 = JPA 查询返回 null。

expected result= 应该返回 car_xid 为 1

【问题讨论】:

    标签: spring spring-data-jpa


    【解决方案1】:

    试试这个。如您所见,where 子句中不需要 Cars:为 Booking Table 创建对象

    @Query("select b.cars.carPid from Booking b where b.fromDate between ?1 and ?2 or b.toDate between ?3 and ?4 or b.fromDate < ?5 and b.toDate > ?6")
    List<Integer> getBookedCarId(Date fromDate, Date toDate, Date from, Date to, Date frmDate, Date tDate);    
    

    【讨论】:

    • 感谢您的回复,但这也不起作用,目前我正在使用本地查询临时但我不想使用本地查询我想使用 jpql。
    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多