[英]JPA Repository - Query search if fields they are not filled
我需要對一組字段進行查詢,但前提是它們已填充或不為空。
例如,我需要在所有GuestMeting 中搜索:GuestMeeting.created_at(日期間隔)和GuestMeeting.group.id。 但是,如果在搜索框中我只選擇一個組,我只會“忽略”日期間隔。
public class GuestsMeeting
{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private long id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "groupId")
private Group group;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "guestId")
private Guest guest;
@Column(nullable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
@CreationTimestamp
@JsonIgnore
private Timestamp created_at;
}
public class Guest
{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private long id;
@Column
private String name;
@Column
private String phoneNumber;
@Column
private String email;
}
@Query("select gm from GuestsMeeting gm inner join gm.group g where (gm.created_at >= ?1 and gm.created_at <= ?2) and g.id = ?3") List<GuestsMeeting> findAll(Date startDate, Date endDate, long groupId);
謝謝
您可以在查詢中使用命名參數並使用額外的 OR 子句來檢查命名參數是否為 NULL。 以下面的代碼為例。
如果
startDate 不為空 - 使用開始日期過濾器
endDate 不為空 - 使用結束日期過濾器
(可選) groupId 不為 null - 應用 groupId 過濾器
@Query("select gm from GuestsMeeting gm inner join gm.group g
where
(:startDate IS NULL or gm.created_at >= : startDate)
and
(:endDate IS NULL or gm.created_at <= :endDate)
and g.id = : groupId")
List<GuestsMeeting> findAll(@Param("startDate") Date startDate, @Param("endDate") Date endDate, @Param("groupId") long groupId);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.