2012-06-04 6 views
5

ich die folgende Entity-Klasse haben:Wie bekomme ich Hibernate Filter in JPA?


@Entity 
@FilterDef (name = "byLastName", parameters = @Parameter (name = "lastName", type="string")) 
@Filters ({ 
    @Filter (name = "byLastName", condition = "lastName = :lastName") 
}) 
public class User { 
    String firstName; 
    String lastName; 
}

In meinem DAO ich dies tun:


public User findById (Long id) 
{ 
    Session s = (Session) em.getDelegate (); 
    s.enableFilter ("byLastName").setParameter ("lastName", "smith"); 

    User u = em.find (User.class, id); 
    return (u); 
}

Nun, wenn ich das richtig verstehen, ich sollte der Filter angewendet werden, und jeder Benutzer, Ich versuche abzurufen sollte als Null zurückkommen, wenn der Nachname nicht gleich "Smith" ist. Das Problem besteht darin, dass die Filter scheinbar nicht angewendet werden. Jeder Benutzer, den ich aus der Datenbank abrufen möchte, wird unabhängig vom Wert des letzten Namens zurückgegeben.

Bin ich falsch verstanden, wie Filter funktionieren? Oder fehlt mir etwas in wie ich das konfiguriert habe? Beachten Sie, dass ich nicht hibernate.cfg.xml verwende; Alles ist für mich mit JPA und Anmerkungen konfiguriert.

Jede Hilfe würde sehr geschätzt werden.

Danke.

Antwort

5

Filter beeinflussen keine Form des Nachschlagens nach IDs. Dies ist auch der genaue Grund, warum One-to-One- und Many-to-One-Verbindungen nicht gefiltert werden können.

+0

Dies schien mein Problem zu sein, als ich den Code änderte, um stattdessen eine Abfrage zu verwenden, funktionierte es wie ein Champion. Ich hatte nicht wirklich gründlich darüber nachgedacht (ich bin wirklich neu in der Hibernate-Filter-Sache), aber ich denke, es macht einen gewissen Sinn, nicht zu filtern, wenn Sie bereits die ID eines bestimmten Objekts haben. Danke, dass du mich richtig gestellt hast – Steve