• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Spring Data - pobieranie encji z polami według pewnych warunków

0 głosów
210 wizyt
pytanie zadane 12 maja 2017 w Java przez Jonki Dyskutant (8,180 p.)
edycja 12 maja 2017 przez Jonki

Używam w programie Spring Data i crudowe repozytorium. 

Mam encję user

@Entity
@Table(name = "users")
public class User {
...
@OneToMany(mappedBy = "recipientUser", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Message> receivedMessages;
...

i encję wiadomość

@Entity
@Table(name = "messages")
public class Message {
...
@ManyToOne
    @JoinColumn(name = "recipient")
    private User recipientUser;
...

Pobieram sobie użytkownika bez problemu

 public User getUser(final Long id);

Jednak teraz chciałbym dodać do swojego serwisu możliwość usuwania wiadomości. Zastanawiałem się chwilę jak to zrobić i wpadłem na pomysł, aby stworzyć w encji "Message" jeszcze jedno pole o nazwie "isVisibleForRecipient" z typem boolean i jeśli użytkowwik usunie odebraną wiadomość to dla niego ona nie będzie już widoczna, ale dla osoby wysyłającej będzie dalej widoczna. Chodzi o to, że posiadam w bazie tylko jedną taką wiadomość i nie mogę jej od tak sobie usunąć, dlatego muszę posługiwać się dodatkowymi polami. Jakbym ją całkowicie usunął, to usunąłbym ją także z bazy, przez co nawet osoba wysyłająca nie widziałaby tej wiadomości. Dlatego jeśli osoba odbierająca wiadomość usunie ją, to tylko zmieni wartość pola widoczności, tak samo jeśli osoba wysyłająca usunie ją z wiadomości wysłanych.

I tu pojawia się problem podczas pobierania encji. Jeśli pobiorę encję w taki sposób jaki robię to teraz, to pobierze mi wszystkie odebrane wiadomości, nawet te które nie są widoczne dla odbiorcy, bo w polu "recipientID" musi być id użytkownika. 

Czy istnieją jakieś adnotację, które modyfikują polecenie pobierania encji w taki sposób, że gdy "isVisibleForRecipient" ma wartość "true" to ta wiadomość nie jest pobierana?

 

EDIT: Znalazłem coś na temat 

NamedNativeQuery

jednak nie wiem w jaki sposób stworzyć w jednym poleceniu warunek, pobrać wartość według warunku i pobrać wiele innych danych jednocześnie w jednym poleceniu. I w jaki sposób pobrać zależne wiadomości na  zasadzie "OneToMany".

1 odpowiedź

0 głosów
odpowiedź 12 maja 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Możesz napisać zapytanie sql które bedzie pobierało tylko te wiadomości które mają nie ustawioną flage.

Tzn możesz mieć repozytorium w którym możesz mieć dwie metody pobierz wiadomości nadawcy i pobierz wiadomości odbiorcy. Które bedą pobierały id użytkownika i bedziesz mógł odfiltrować te które potrzebujesz.

Podobne pytania

0 głosów
0 odpowiedzi 258 wizyt
0 głosów
0 odpowiedzi 175 wizyt
pytanie zadane 17 czerwca 2017 w Java przez Jonki Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 2,183 wizyt
pytanie zadane 22 maja 2017 w Java przez Jonki Dyskutant (8,180 p.)

93,629 zapytań

142,551 odpowiedzi

323,052 komentarzy

63,134 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1936p. - dia-Chann
  2. 1916p. - DziarnowskiJ
  3. 1886p. - Łukasz Piwowar
  4. 1868p. - CC PL
  5. 1842p. - Maurycy W
  6. 1841p. - raydeal
  7. 1840p. - Adrian Wieprzkowicz
  8. 1782p. - rucin93
  9. 1701p. - rafalszastok
  10. 1588p. - Tomasz Bielak
  11. 1521p. - Michal Drewniak
  12. 1491p. - Rafał Trójniak
  13. 1444p. - robwarsz
  14. 1257p. - ssynowiec
  15. 1208p. - Mariusz Fornal
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...