Hibernate只允许在我的DAO类中查询一次

Hibernate只允许在我的DAO类中查询一次,hibernate,session,Hibernate,Session,我试图编写一个DAO类来验证用户在网页上的登录,然而,Hibernate查询似乎只工作一次。当用户尝试第二次登录时,Hibernate会抛出许多错误: public boolean isUserAndPasswordValid(String username, String password) { User user = null; Session session = HibernateUtil.getSessionFactory().getCurrentSess

我试图编写一个DAO类来验证用户在网页上的登录,然而,Hibernate查询似乎只工作一次。当用户尝试第二次登录时,Hibernate会抛出许多错误:

public boolean isUserAndPasswordValid(String username, String password)
    {
        User user = null;
    Session session = HibernateUtil.getSessionFactory().getCurrentSession();
    Transaction tx = session.beginTransaction();

    Query query = session.createQuery("from User where username = :username");
    query.setParameter("username", username);

    user = (User) query.uniqueResult();
//        List<?> list = query.list();
        tx.commit();

//        if (list.size() == 0)
//            return false;

//        user = (User) list.get(0);

    HibernateUtil.closeSessionFactory();

    if (user != null)
    {
        if (user.getPassword().equals(User.md5Spring(password)))
            return true;
    }
    return false;
}
下面是尝试第二次登录时的错误消息:(顺便说一句,我正在使用忍者框架和Hibernate)

17:38:11.803[qtp362239120-16]错误ninja.NinjaImpl-发出错误请求400。调用route:/admin/loginPost(类:class controllers.administrationcontrollermethod:public ninja.Result controllers.administrationcontrollers.loginPost(ninja.Context,models.User))时出现了一些错误
org.hibernate.service.UnknownServiceException:请求的未知服务[org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
在org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:201)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.internal.AbstractSessionImpl.getJdbcConnectionAccess(AbstractSessionImpl.java:341)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.engine.jdbc.internal.jdbcoordinatorimpl.(jdbcoordinatorimpl.java:114)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.(TransactionCoordinatorImpl.java:89)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.internal.SessionImpl.(SessionImpl.java:258)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.internal.sessionfactorympl$SessionBuilderImpl.openSession(sessionfactorympl.java:1589)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.context.internal.ThreadLocalSessionContext.buildOrObtainSession(ThreadLocalSessionContext.java:157)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.context.internal.ThreadLocalSessionContext.currentSession(ThreadLocalSessionContext.java:109)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在org.hibernate.internal.sessionfactorympl.getCurrentSession(sessionfactorympl.java:1014)~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
在dao.UserDao.isUserAndPasswordValid(UserDao.java:27)~[classes/:na]
在controllers.AdministrationController.loginPost(AdministrationController.java:37)~[classes/:na]
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)~[na:1.8.0\u 05]
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)~[na:1.8.0\u 05]
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)~[na:1.8.0\u 05]
在java.lang.reflect.Method.invoke(Method.java:483)~[na:1.8.0\u 05]
在ninja.params.ControllerMethodInvoker.invoke(ControllerMethodInvoker.java:55)~[ninja-core-3.1.5.jar:na]
下一步(FilterChainEnd.java:48)~[ninja-core-3.1.5.jar:na]
在ninja.NinjaImpl.invoke(NinjaImpl.java:112)~[ninja-core-3.1.5.jar:na]
位于ninja.servlet.NinjaServletDispatcher.service(NinjaServletDispatcher.java:83)[ninja-servlet-3.1.5.jar:na]
在com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)[guice-servlet-3.0.jar:na]
在com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)[guice-servlet-3.0.jar:na]
位于com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)[guice-servlet-3.0.jar:na]
在com.google.inject.servlet.filterchaininstauge.doFilter(filterchaininstauge.java:62)[guice-servlet-3.0.jar:na]
在com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)[guice-servlet-3.0.jar:na]
在com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)[guice-servlet-3.0.jar:na]
在org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1615)[jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550)[jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)[jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.server.server.handle(server.java:459)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
位于org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)[jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)[jetty-io-9.1.2.v20140210.jar:9.1.2.v20140210]
位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)[jetty-util-9.1.2.v20140210.jar:9.1.2.v20140210]
在org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)[jetty-util-9.1.2.v20140210.jar:9.1.2.v20140210]
在java.lang.Thread.run(Thread.java:745)[na:1.8.0_05]

建造HibernateSessionFactory非常昂贵。在应用程序开始时只能执行一次。并在服务器或应用程序关闭时关闭

应为每个请求创建并关闭会话对象。对于只读查询,也不需要将其作为事务的一部分。因此,您可以删除事务开始和提交行以及closeSessionFactory行,然后重试。
user = (User) session.get(User.class, username);
17:38:11.803 [qtp362239120-16] ERROR ninja.NinjaImpl - Emitting bad request 400. Something really wrong when calling route: /admin/loginPost (class: class controllers.AdministrationController method: public ninja.Result controllers.AdministrationController.loginPost(ninja.Context,models.User))
org.hibernate.service.UnknownServiceException: Unknown service requested [org.hibernate.engine.jdbc.connections.spi.ConnectionProvider]
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:201) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.AbstractSessionImpl.getJdbcConnectionAccess(AbstractSessionImpl.java:341) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.<init>(JdbcCoordinatorImpl.java:114) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.<init>(TransactionCoordinatorImpl.java:89) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.SessionImpl.<init>(SessionImpl.java:258) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.SessionFactoryImpl$SessionBuilderImpl.openSession(SessionFactoryImpl.java:1589) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.context.internal.ThreadLocalSessionContext.buildOrObtainSession(ThreadLocalSessionContext.java:157) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.context.internal.ThreadLocalSessionContext.currentSession(ThreadLocalSessionContext.java:109) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1014) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final]
    at dao.UserDao.isUserAndPasswordValid(UserDao.java:27) ~[classes/:na]
    at controllers.AdministrationController.loginPost(AdministrationController.java:37) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_05]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_05]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_05]
    at java.lang.reflect.Method.invoke(Method.java:483) ~[na:1.8.0_05]
    at ninja.params.ControllerMethodInvoker.invoke(ControllerMethodInvoker.java:55) ~[ninja-core-3.1.5.jar:na]
    at ninja.FilterChainEnd.next(FilterChainEnd.java:48) ~[ninja-core-3.1.5.jar:na]
    at ninja.NinjaImpl.invoke(NinjaImpl.java:112) ~[ninja-core-3.1.5.jar:na]
    at ninja.servlet.NinjaServletDispatcher.service(NinjaServletDispatcher.java:83) [ninja-servlet-3.1.5.jar:na]
    at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263) [guice-servlet-3.0.jar:na]
    at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178) [guice-servlet-3.0.jar:na]
    at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) [guice-servlet-3.0.jar:na]
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62) [guice-servlet-3.0.jar:na]
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118) [guice-servlet-3.0.jar:na]
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113) [guice-servlet-3.0.jar:na]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1615) [jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:550) [jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479) [jetty-servlet-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.Server.handle(Server.java:459) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232) [jetty-server-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505) [jetty-io-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607) [jetty-util-9.1.2.v20140210.jar:9.1.2.v20140210]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536) [jetty-util-9.1.2.v20140210.jar:9.1.2.v20140210]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05]