Tôi đang sử dụng truy vấn JPQL để kiểm tra xem danh sách có chứa các giá trị enum được chỉ định hay không. Nếu giá trị enum là một phần tử duy nhất để kiểm tra thì nó khá đơn giản.jpql IN truy vấn với giá trị enum
Trong biểu thức truy vấn,
query = "... where s.status = :status";
và sau đó thiết lập thông số như
query.setParameter("status", statusValue);
Nhưng tôi muốn kiểm tra một cái gì đó như dưới đây
query = "... where s.status IN (:statusList)";
nơi statusList
là một chuỗi các số (ví dụ: "0,1,2" có nghĩa là l ist of the status of status)
Nhưng tôi không thể tìm được giải pháp. Tôi cũng đã kiểm tra với s.status.ordinal() IN (statusList)
trong truy vấn nhưng không có may mắn.
Tôi đang sử dụng JPA thực hiện: EclipseLink (JPA 2.0) tên thực
My Entity là SType
public enum SType
{
REQUISITION,
PURCHASE,
FINISHED,
// others
RETURN;
}
QUERY:
String querySt = "select s.slipType.slipNameSt,s.slipNumberSt, s.idNr from Slip s
where s.slipType.sType IN (:enumTypeListt)";
em.createQuery(querySt).setParameter("enumTypeList", EnumSet.of(SType.REQUISITION,
SType.PURCHASE));
Bạn bền vững giá trị thứ tự trái với chuỗi? –
@KevinBowersox: Có, trong cơ sở dữ liệu, tôi đã lưu trữ các giá trị thứ tự và trong front-end, Enum đại diện cho giá trị đó. – sarwar026
Tôi khuyên bạn nên lưu trữ Chuỗi thực tế của enum trong cơ sở dữ liệu. Nếu enum của bạn bao giờ thay đổi bạn có thể cần phải thực hiện một số điều chỉnh dữ liệu trong cơ sở dữ liệu của bạn. –