как отличить в JPA весеннюю загрузку? - PullRequest
1 голос
/ 20 июня 2019

как использовать отчетливый в JPA? потому что я хочу получить все телефонные номера и имена в своей таблице, поэтому я получаю все результаты по уникальным, мое имя таблицы в базе данных называется whatsapp_chat, и я хочу получить по wa_id (моя полевая база данных)

я пытался Lits findDistincByWhatsappid (), Lits findDistincWhatsappid (); Я получил ошибку, чтобы использовать их, как исправить способ использовать Distinct? Я новичок в загрузке Spring и 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;

}

Ответы [ 4 ]

1 голос
/ 20 июня 2019

У вас есть два варианта:

  1. Написать собственный запрос:

    @Query(value = "SELECT DISTINCT w.WA_ID FROM WHATSAPP_CHAT w", nativeQuery = true)
    List<String> findDistinctWhatsappIds();
    
  2. Написать 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());
    }
}
1 голос
/ 20 июня 2019

Это HQL-запрос, а не собственный, поэтому он использует имя класса сущности вместе с именами его полей.

Попробуйте переписать запрос следующим образом:

"SELECT DISTINCT whatsappid FROM WhatsappChat"

0 голосов
/ 20 июня 2019

Вы можете использовать это вместо того, которое используете, вы не можете использовать столбец непосредственно в запросе в jpa, пока не установите для поля nativeQuery значение true.Используйте это

@Query(value = "SELECT DISTINCT W.whatsappid FROM WhatsappChat W")
List<String> findDistinctWhatsappid();
0 голосов
/ 20 июня 2019

Делай как следует:

@Query(value="SELECT DISTINCT WA_ID FROM WHATSAPP_CHAT", nativeQuery = true)
    List<String> findDistinctWhatsappid();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...