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ść?