Pobieranie tylko nieusuniętych obiektów

1

Hej
Wszystkie encje u mnie dziedziczą po takim czymś:

@Data
@MappedSuperclass
public class AbstractEntity implements Identifiable<Long> {

    @Id
    @GeneratedValue
    private Long id;

    private boolean active = true;

    public void deactivate(){
        active = false;
    }

}

i mam taką strukturę encji: Liga zawiera rundy. Rundy zawierają Mecze.
W momencie usuwania encji używam po prostu metody deactivate.
Problem mam teraz jak bez SQLa pobrać wszystkie ligi czyli wszystkie rundy czyli tez wszystkie mecz ale tylko gdzie mają active = true. Samą ligę łatwo bo starczy w repository/finderze sprawdzić ale chodzi o te obiekty "głębiej"? W którym miejscu to robić?

0

Proponuję warstwę DAO / Repository i tam użyć HQL / Hibernate Criteria (jeśli w ogóle używasz Hibernate)

3

Najprościej przynajmniej na początku jest dodać odpowiedni warunek w HQL/JPQL/Criteria tyle tylko, że to nie rozwiązuje problemu, bo musisz ten warunek dodać wszędzie. Istnieją lepsze rozwiązania. Choć wprowadzają odrobinę magii do kodu ;)

Działa to tylko z hibernatem


@Data
@MappedSuperclass
@Where(clause = "active='true'")
public class AbstractEntity implements Identifiable<Long> {
 
    @Id
    @GeneratedValue
    private Long id;
 
    private boolean active = true;
 
    public void deactivate(){
        active = false;
    }
 
}

Adnotacja @Where dodaje warunek do każdego zapytania na encji, ktore jest generowane z metod w rodzaju findAll czy findById. Więcej w dokumentacji

1
Koziołek napisał(a):

Najprościej przynajmniej na początku jest dodać odpowiedni warunek w HQL/JPQL/Criteria tyle tylko, że to nie rozwiązuje problemu, bo musisz ten warunek dodać wszędzie. ** Istnieją lepsze rozwiązania.Choć wprowadzają odrobinę magii do kodu ;)**

Rozwiniesz?

0

@Koziołek:
a czy jest możliwe aby działało to na encje dziedziczące po niej czy w każdej muszę to wpisywać osobno?
Zależy mi aby wszystkie właściwości encji były własnie w takiej abstrakcyjnej encji i tylko po niej dziedziczyć i mieć pewność, że wszystko będzie działało

BTW drugi problem, to działa ładnie jak się tyczy tylko tej klasy. A nie jestem wstanie zrobić tak, aby tyczyło się też pól w tej klasie. Czyli mam jedną encję która ma listę innych. I chciałbym aby podczas pobierania tej jednej encji sprawdzało też czy active=true w tych encjach z tej listy. Da się to jakoś łatwo zrobić?

0

@artur52: chodzi o adnotację @Where, która umagicznia nam encję. Jeżeli pokazałbym ci DAO oraz zapytania, które idą w logu, to zapewne zdziwiłbyś się widząc dodatkowy warunek.

@danek: nie, adnotacja ta nie jest dziedziczona.

0

@Koziołek: Czyli wadą jest konieczność pamiętania o tej adnotacji zarówno w encjach jak i w polach tej encji do których chce się odnieść?

1 użytkowników online, w tym zalogowanych: 0, gości: 1