[英]how to Distinct in JPA Spring boot?
在JPA中如何使用distinct? 因為我想獲取表中的所有電話號碼和姓名,所以我通過unique來獲取所有結果,我的表名在名為whatsapp_chat的數據庫中,並且我想通過wa_id(我的字段數據庫)獲取
我試過Lits findDistincByWhatsappid(),Lits findDistincWhatsappid(); 使用它們時出現錯誤,如何正確使用Distinct? 我是Spring Boot和Java的新手
我也嘗試過這個:
@Query("SELECT DISTINCT wa_id FROM whatsapp_chat")
List<String> findDistinctWhatsappid();
熙是我的實體/模型:
Entity
@Data
@Table(name = "WHATSAPP_CHAT")
@DynamicUpdate
public class WhatsappChat extends Base {
@Column(name = "NAME")
private String name;
@Column(name = "WA_ID")
private String whatsappid;
@Column(name = "TEXT")
private String text;
@Column(name = "MESSAGE_ID")
private String messageid;
@Temporal(TemporalType.TIMESTAMP)
private Date timestamp;
}
這是一個HQL查詢,而不是本機查詢,因此它使用實體的類名及其字段名。
考慮將查詢詞改寫為:
"SELECT DISTINCT whatsappid FROM WhatsappChat"
您有兩種選擇:
編寫本機查詢:
@Query(value = "SELECT DISTINCT w.WA_ID FROM WHATSAPP_CHAT w", nativeQuery = true) List<String> findDistinctWhatsappIds();
編寫JPQL查詢(使用對象查詢):
@Query("SELECT DISTINCT w.whatsappid FROM WhatsappChat AS w") List<String> findDistinctWhatsappIds();
無論哪種方式,我都將方法名稱更改為復數形式(它是一個列表),並在Id中將其大寫形式(列檢索)更改為確切知道它即將來臨。
注意:方法名稱對查詢本身沒有影響,因為它包含注釋@Query指定要執行的內容。
您可以對此進行測試(如果不使用Spring-boot,則有所不同):
@DataJpaTest
@RunWith(SpringRunner.class)
public class WhatsappChatRepositoryTest {
@Autowired
EntityManager entityManager;
@Autowired
WhatsappChatRepository whatsappChatRepository;
@Before
public void setup() {
entityManager.persist(new WhatsappChat("whats1", "whats01", 1));
entityManager.persist(new WhatsappChat("whats2", "whats02", 2));
entityManager.persist(new WhatsappChat("whats3", "whats01", 3));
entityManager.persist(new WhatsappChat("whats4", "whats04", 4));
entityManager.flush();
}
@Test
public void shouldTestSameResult() {
assertEquals(whatsappChatRepository.findDistinctWhatsappIds(), whatsappChatRepository.findDistinctWhatsappIdsNative());
assertEquals(Arrays.asList("whats01", "whats02", "whats04"), whatsappChatRepository.findDistinctWhatsappIds());
}
}
遵循以下步驟:
@Query(value="SELECT DISTINCT WA_ID FROM WHATSAPP_CHAT", nativeQuery = true)
List<String> findDistinctWhatsappid();
您可以使用此列而不是正在使用的列,除非將nativeQuery字段設置為true,否則無法直接在jpa的查詢中使用該列。 用這個
@Query(value = "SELECT DISTINCT W.whatsappid FROM WhatsappChat W")
List<String> findDistinctWhatsappid();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.