2012-06-04 15 views
5

Tengo el siguiente clase de entidad:¿Cómo consigo que los filtros Hibernate funcionen en 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; 
}

En mi DAO que hacer esto:


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); 
}

Ahora, si yo estoy entendiendo esto correctamente, el filtro debe ser aplicado, y cualquier usuario que Intento recuperar debería volver como nulo si el apellido no es igual a "smith". El problema es que los filtros no parecen aplicarse. Cualquier usuario que intente recuperar de la base de datos, independientemente del valor de lastName, se devuelve.

¿Entiendo mal cómo funcionan los filtros? ¿O me estoy perdiendo algo de cómo configuro esto? Tenga en cuenta que no estoy usando hibernate.cfg.xml; todo está configurado para mí usando JPA y anotaciones.

Cualquier ayuda sería muy apreciada.

Gracias.

Respuesta

5

Los filtros no afectan a ninguna forma de búsqueda por identificadores. Esta es también la razón exacta de que las asociaciones uno a uno y muchas a una no se puedan filtrar.

+0

Este parecía ser mi problema, cuando cambié el código para usar una consulta en su lugar, funcionó como un campeón. Realmente no lo había pensado en profundidad (soy realmente nuevo en lo del filtro Hibernate), pero creo que tiene algún sentido no filtrar cuando ya tienes el ID de un objeto determinado. Gracias por corregirme – Steve

Cuestiones relacionadas