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

Dynamiczne wyszukiwanie w subklasach

0 głosów
236 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 (283,580 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ź 282 wizyt
pytanie zadane 19 lipca 2017 w Java przez Swierzak Użytkownik (690 p.)
+1 głos
1 odpowiedź 819 wizyt
pytanie zadane 7 listopada 2022 w Java przez Lulex Użytkownik (820 p.)
0 głosów
2 odpowiedzi 2,216 wizyt

93,800 zapytań

142,770 odpowiedzi

323,464 komentarzy

63,421 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...