2012-06-04 4 views
5

私は、次のエンティティクラスている:私はこれを私のDAOでJPAでHibernate Filtersを動作させるにはどうすればよいですか?


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

の操作を行います。


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

を今、私はこれを正しく理解していた場合、フィルタが適用され、任意のユーザーすべきことであるが、 lastNameが "smith"と等しくない場合は、nullを返す必要があります。問題は、フィルタが適用されていないように見えることです。 lastNameの値に関係なく、データベースから取得しようとするすべてのユーザーが返されます。

フィルタの仕組みを誤解していますか?あるいは、私はこれをどのように設定しているのか分からないのですか?私はhibernate.cfg.xmlを使用していないことに注意してください。 JPAとアノテーションを使用して私のためにすべて設定されています。

ご協力いただければ幸いです。

ありがとうございました。

答えて

5

フィルタは、IDによるルックアップの形式には影響しません。これは、1対1および多対1の関連付けをフィルタリングできない正確な理由でもあります。

+0

これは私の問題だと思われました。代わりにクエリを使用するようにコードを変更したとき、それはチャンピオンのように機能しました。私はそれについて深く考えていませんでした(私はHibernateフィルタのことを本当に新しくしています)。しかし、あなたが既に与えられたオブジェクトのIDを持っているときにフィルタリングしないようにするのはある程度意味があります。私を真っ直ぐにしてくれて – Steve

関連する問題