簡體   English   中英

JPA Repository - 如果字段未填寫,則查詢搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM