2015-07-03 16 views
6

mam kawałek przykładowy kod jak to-Przestawianie @Where stan hibernacji klauzula 4.3.4

@Entity 
@Table(name = "employee") 
@Where(clause = "active IS TRUE") 
public class Employee{ 
} 

to będzie sprowadzić cały zapis pracowników tabeli mający aktywny = true lub 1. W niektórych przypadkach może być wymagane, aby załadować rekordy mające active = false lub 0.

Jeśli napiszę mój kod jako FROM Employee emp WHERE emp.active IS FALSE, wygenerowane zapytanie zawiera bota warunki podane w HQL i Adnotacje.

Dlatego oczekiwane wyniki nie nadchodzą. Czy mimo to można przesłonić zdefiniowany powyżej obiekt zdefiniowany jako @Where?

Odpowiedz

1

AFAIK nie można zastąpić go wewnątrz klasy, bo jeśli spojrzeć na @Where documentation widać, że interfejs ten jest odnotowany @Retention(value=RUNTIME) więc ma to RUNTIME jako RetentionPolicy i można zobaczyć w RetentionPolicy documentation że:

czas: adnotacje mają być zapisane w pliku klasy przez kompilator i przechowywane przez VM w czasie wykonywania, a więc mogą być odczytywane w zadumie.

Które zmusić @Where adnotacji być zapisane w pliku klasy przez kompilator i przechowywane przez VM w czasie wykonywania, więc będzie ona stosowana na całym tej klasie.

+0

Czy nie ma innego sposobu na wykonanie tego zadania, więc nie muszę zmieniać każdego z moich zapytań? –

+0

Najprostszym sposobem jest uniknięcie określenia '@ Where' dla całej klasy. –

Powiązane problemy