5

私は次のエンティティクラスを持っています:


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

私のDAOではこれを行います:


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とアノテーションを使用して構成されています。

どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

5

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

于 2012-06-04T16:21:20.900 に答える