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

Dynamiczne wyszukiwanie w subklasach

Object Storage Arubacloud
0 głosów
96 wizyt
pytanie zadane 25 września 2022 w Java przez Lulex Użytkownik (820 p.)

Cześć,

próbuje sił z abstrakcyjnym Entity z którego dziedziczą inne klasy.

Mam klasę abstrakcyjną Shape:

@Entity
@Inheritance(strategy = TABLE_PER_CLASS)
public abstract class ShapeEntity {
    @Id
    private String id = UUID.randomUUID().toString();

    public abstract double getArea();

    public abstract double getPerimeter();
}

po Shape dziedziczy Circle i Square:


@Entity
public class CircleEntity extends ShapeEntity {
    private Double radius;

    @Override
    public double getArea() {
        return Math.PI * Math.pow(2, radius);
    }

    @Override
    public double getPerimeter() {
        return 2 * Math.PI * radius;
    }
}
@Entity
public class SquareEntity extends ShapeEntity {
    private Double width;

    @Override
    public double getArea() {
        return width * width;
    }

    @Override
    public double getPerimeter() {
        return 4 * width;
    }
}

Aby pobrać wszystkie obiekty wiem, że nie muszę wołać wszystkich repozytoriów aby pobrać kształty, wystarczy, że zrobię:

public interface ShapeEntityRepository extends JpaRepository<ShapeEntity, String> {

    List<ShapeEntity> findAll();
}

I to działa, zwraca wszystkie kształty jakie mam w bazie. Jednak chciałbym do tego dodać kilka filtrów do wyszukiwania.

Np chciałbym dodac kryteria: typ (circle / square), areaFrom, areaTo

- typ mógłbym zrobić jakiegoś if'a / switcha i zwracać wszystko z danego repozytorium

- areaFrom/ areaTo - to może mi rozwiązać coś tego typu:

List<ShapeEntity> findAllByAreaGreaterThan();

jednak czy mogę to jakoś połączyć w całość? Czy jest jakieś rozwiązanie które pozowli mi wrzucić w ShapeRepository odpowiednie kryteria aby przekopał wszystkie tabele? 

Chciałbym dodać też parametry typu: - radius, width itp - czyli pola które są w subclassach. Czy jest możliwe połączenie tego wszystkiego w całość?

komentarz 25 września 2022 przez Wiciorny Ekspert (272,330 p.)
tak jest to możliwe, aktualnie oczekujesz że zrobi to za ciebie gotowy framework... co jest bez sensu.
Musisz sam napisać  odp. zapytania czy to jako criteria api, czy moze skorzystać z  API w ramach JPA do filtrowania i przygotowac specjalne kryteria. Np z wykorzystaniem odp. klas
https://docs.spring.io/spring-data/jpa/docs/1.5.x/api/org/springframework/data/jpa/domain/Specifications.html

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 150 wizyt
pytanie zadane 19 lipca 2017 w Java przez Swierzak Użytkownik (690 p.)
+1 głos
1 odpowiedź 401 wizyt
pytanie zadane 7 listopada 2022 w Java przez Lulex Użytkownik (820 p.)
0 głosów
2 odpowiedzi 1,209 wizyt

92,689 zapytań

141,601 odpowiedzi

320,093 komentarzy

62,048 pasjonatów

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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...