私は 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)
ここで何が問題になっていると思われますか?