1

私はこの問題を抱えており、その2日間、理由がわかりません。ログインを確認したい。私のコード:

public String Verify(String name, String password) {
String admin="";
    Query q = emf
            .createEntityManager()
            .createQuery(
                    "SELECT u FROM user u where u.name = :name and u.password=:password");
    q.setParameter("name", name);
    q.setParameter("password", password);
    User u = (User) q.getSingleResult();

    if (u.getAdmin().equalsIgnoreCase("yes")) {
        admin = "yes";
    } else {
        admin = "no";
    }

    return admin;
}

次に、このエラーが発生します。

java.lang.NullPointerException
at db.DbProcessor.Verify(DbProcessor.java:19)
at controller.VerifikoServlet.doGet(VerifikoServlet.java:25)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

19行目は「.createEntityManager()」

4

3 に答える 3

2

Entity Factory Manager を初期化するためにこれを書いて問題を修正しました。

private static EntityManagerFactory factory = Persistence
        .createEntityManagerFactory("PROJECT_NAME");
EntityManager em = factory.createEntityManager();
于 2013-01-26T09:56:49.157 に答える
0

永続化レイヤーがロードされている場合、以下のコードを追加するだけで確認できます: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ パブリッククラスJpaUtil {プライベート静的最終的なEntityManagerFactory emf;

static {
    try {
        factory = Persistence.createEntityManagerFactory("MyPu");
    } catch (Throwable ex) {
        logger.error("Initial SessionFactory creation failed", ex);
        throw new ExceptionInInitializerError(ex);
    }
}

...

}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~

これは、エンティティ マネージャー ファクトリ オブジェクトを取得するための一般的なものではないことに注意してください。しかし、ここで重要なのは、その内部の例外処理、つまり ExceptionInInitializerError ...

これにより、Date 型変数の TemporalType が欠落しているなど、Entity クラスに関連する問題があるかどうかが明確にわかります。

したがって、エンティティ クラスで NamedQuery を使用しているとしますが、エンティティ クラスに型または必須プロパティ (Date 型の TemoralType など) がないため、永続化ではそれをロードできません。

そのため、言及された例外を必ず処理してください

于 2015-06-27T08:47:51.993 に答える
0

問題は、あなたが初期化していないことですEntityManagerFactory. ご覧のとおり、サーブレット環境で実行しています。

次のリンクを参照してください。http ://weblogs.java.net/blog/ss141213/archive/2005/12/dont_use_persis_1.html

于 2013-01-25T14:45:29.010 に答える