2

私は JSF 2.0 と EclipseLink を使用するこのアプリケーションを持っています。MySQL で作成されたデータベース用に作成されたエンティティがあります。これらのエンティティは netbeans 7.1.2 を使用して作成され、自動的に作成されます。

次に、セッション Bean を使用してこれらのエンティティをem.createQuery操作します。エンティティで NamedQueries をチェックしたところ、完全に一致しましたが、常に null が返されます。

クエリという名前のエンティティからのサンプル:-

@NamedQueries({
    @NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
    @NamedQuery(name = "Users.findByUserId", query = "SELECT u FROM Users u WHERE u.userId = :userId"),
    @NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
    @NamedQuery(name = "Users.findByEmail", query = "SELECT u FROM Users u WHERE u.email = :email"),

セッション Bean でこの findByEmail クエリを使用する方法に注意してください :-

public Users findByEmail(String email){
        em.getTransaction().begin();
        String find = "Users.findByEmail";
        Query query = em.createNamedQuery(find);
        query.setParameter("email", email);
        Users user = (Users) query.getSingleResult();

しかし、この em.createNamedQuery からは常に null が返されるので、最初に .createQuery を使用してみましたが、これもダメでした。

例外のスタックトレース

Caused by: java.lang.NullPointerException
    at com.readme.entities.sessionBeans.UsersFacade.findByEmail(UsersFacade.java:48)
    at com.readme.user.signup.SignupBean.checkAvailability(SignupBean.java:137)
    at com.readme.user.signup.SignupBean.save(SignupBean.java:146)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)

ここで何が問題になっていると思われますか?

4

1 に答える 1

1

あなたem.createNamedQuery(find)のケースで本当にNullPointerExceptionをスローするステートメントである場合、かなり奇妙なことが起こっています。

で初めてem参照を使用すると、NullPointerExceptionがスローされる可能性がありますem.getTransaction().begin()。その場合、非常に一般的な理由は、インジェクションが管理対象クラスでのみ機能するため、エンティティマネージャーがインジェクトされないことです(詳細については、この質問を参照してください)。新しい操作を介してセッションBeanを作成した場合、それは管理されません。

その他の一般的な理由は、@Persistenceontextアノテーションが単に欠落していることです。

于 2012-06-23T21:07:39.187 に答える