Przestawianie @Where stan hibernacji klauzula 4.3.4

głosy
6

Mam kawałek kodu próbki jak to-

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

Będzie to sprowadzić cały zapis pracownik tablica zawierająca aktywny = true lub 1 . W niektórych przypadkach, może wymagać, że chcę, aby załadować rekordy zawierające aktywny = false lub 0 .

Jeśli piszę mojego kodu tak FROM Employee emp WHERE emp.active IS FALSE, ale generowane zapytania zawiera bot warunki podane w HQL i adnotacje.

Stąd, oczekiwane rezultaty nie nadchodzi. Czy mimo to przesłonić predefiniowane @Wherezdefiniowane przez podmiot?

Utwórz 03/07/2015 o 06:48
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

AFAIK nie można zastąpić go wewnątrz klasy, bo jeśli przyjrzeć się z dokumentacją @Where widać, że interfejs ten jest odnotowany @Retention(value=RUNTIME)więc ma RUNTIMEjak RetentionPolicymożna zobaczyć w dokumentacji RetentionPolicy tym:

Czas trwania: 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óry zmusić @Whereadnotacja 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.

Odpowiedział 03/07/2015 o 08:32
źródło użytkownik

głosy
0

Znam jego zbyt stare pytanie, ale byłem w obliczu tego samego problemu i że powinienem podzielić moim obejścia.

Całkowicie zgadzam się z @ cнŝdk odpowiedzi, ponieważ nie można zastąpić, ale można ignorować @Whereklauzuli poprzez określenie nativeQuery, jak poniżej:

@Query(value = "Select * from customer where company_id = ?1", nativeQuery = true) List<Customer> findByCompanyIdIgnoringEntityWhere(Long companyId);

SQL w adnotacji @query musi wskazywać nazwę tabeli i nazwy pól (nie nazwa jednostki).

Odpowiedział 12/05/2019 o 12:48
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more