2012-06-04 26 views
5

Tôi có lớp thực thể sau:Làm cách nào để có Bộ lọc Hibernate hoạt động trong 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; 
}

Trong DAO của tôi, tôi làm điều này:


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

Bây giờ, nếu tôi hiểu biết một cách chính xác này, bộ lọc sẽ được áp dụng, và bất kỳ người dùng mà Tôi cố gắng lấy lại sẽ trở lại như null nếu lastName không bằng "smith". Vấn đề là các bộ lọc dường như không được áp dụng. Bất kỳ Người dùng nào mà tôi cố truy xuất từ ​​cơ sở dữ liệu, bất kể giá trị của lastName được trả lại.

Tôi có hiểu nhầm về cách bộ lọc hoạt động không? Hoặc tôi thiếu một cái gì đó trong cách tôi có cấu hình này? Lưu ý rằng tôi không sử dụng hibernate.cfg.xml; mọi thứ được cấu hình cho tôi bằng cách sử dụng JPA và chú thích.

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn.

Trả lời

5

Bộ lọc không ảnh hưởng đến bất kỳ hình thức tra cứu nào theo id. Đây cũng là lý do chính xác mà không thể lọc các liên kết một-một và nhiều-một.

+0

Điều này dường như là vấn đề của tôi, khi tôi thay đổi mã để sử dụng truy vấn thay vào đó, nó hoạt động như một nhà vô địch. Tôi đã không thực sự nghĩ về nó trong chiều sâu (tôi thực sự mới đến điều bộ lọc Hibernate), nhưng tôi đoán nó làm cho một số mức độ ý nghĩa để không lọc khi bạn đã có ID của một đối tượng nhất định. Cảm ơn cho tôi đặt thẳng – Steve

Các vấn đề liên quan