- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个问题,当我在 DAO 文件中调用 addCus() 方法时,我得到 NullPointerException。我尝试了很多解决方案,但仍然出现此错误。为什么 getCurrentSession() 方法 geterate 这个错误以及如何修复它??
pom.xml
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.10.Final</version>
</dependency>
my-servlet.xml
<mvc:annotation-driven />
<context:component-scan base-package="pl.classes"></context:component-scan>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView"></property>
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<context:property-placeholder location="mysql.properties" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan" value="pl.classes.Customer" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
</props>
</property>
</bean>
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.pass}" />
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
CustomerDaoImpl
public class CustomerDatabaseDaoImpl implements CustomerDatabaseDao {
@Autowired
private SessionFactory session;
private Set<Customer> customers;
private String filename;
private File file;
@Transactional
public void addCus(Customer c) {
this.session.getCurrentSession().save(c);
}
堆栈跟踪
java.lang.NullPointerException
pl.dao.CustomerDatabaseDaoImpl.addCus(CustomerDatabaseDaoImpl.java:47)
pl.service.CustomerDatabaseServiceImpl.addCus(CustomerDatabaseServiceImpl.java:101)
pl.classes.CustomerDatabaseImpl.addCus(CustomerDatabaseImpl.java:76)
pl.controller.HomeController.customerList(HomeController.java:31)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:483)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:743)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:672)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:82)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:933)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:867)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:953)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:844)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:829)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
我的 sessionFactory 出了什么问题??
最佳答案
我假设 CustomerDatabaseDaoImpl 的第 47 行引用了 this.session.getCurrentSession().save(c);
Avoid the use of new to instantiate, just in case you are using it. Spring IOC will not work with new keyword. Hence this.session.getCurrentSession() will return null.
您尚未指定有关如何实例化 CustomerDatabaseDaoImpl 的详细信息。我正在向您解释解决此问题的正确方法。
@Autowired
private CustomerDatabaseDao customerDatabaseDao;
要使 spring 注入(inject)/ Autowiring CustomerDatabaseDao 的依赖项,它必须知道相同类型的 bin。从配置文件 (my-servlet.xml) 可以清楚地看出您没有定义这个 bean。因此使用 @Repository CustomerDatabaseDaoImpl 上的注释。 @Repository 只能用在具体类上。 How to use Spring @Repository, and @Service :
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
public class CustomerDatabaseDaoImpl implements CustomerDatabaseDao {
@Autowired
private SessionFactory session;
@Transactional
public void addCus(Customer c) {
this.session.getCurrentSession().save(c);
}
}
下一个重要步骤是在配置文件中指定正确的包详细信息。特别是具体类的包。如果您有多个包,请使用“,”分隔值或仅提及父包:
<context:component-scan base-package="pl.classes,pl.dao"></context:component-scan>
您的服务类应该采用类似的方法。用 @Service 注释具体的服务类注释。使用 @Autowire 将服务类注入(inject)到 Spring Controller 中。在 <context:component-scan base-package="pl.classes,pl.dao,pi.service"></context:component-scan>.
中提及包裹
请按照本教程了解更多详细信息:HowToDoInJava并随时发表评论以获得进一步的帮助。
关于java - getCurrentSession() - NullPointerException - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625857/
堆栈跟踪: java.lang.NullPointerException at de.mail.HibernateUtil.getSession(HibernateUtil.java:30) at d
我正在尝试将 Hibernate 4.1 与 Spring 3.1.3 集成。 //configuration file (beans.xml) org.
我是 spring 和 hibernate 的新手,一切正常,但我检查了每次调用 getCurrentSession 时,在 mysql 中创建了一个新的连接线程,该线程进入休眠状态。据我所知,这不是
我需要了解使用 Hibernate.getCurrentSession() 的最佳情况? 我的理解是,它在像 WebApplication(Spring MVC)这样的多线程环境中是有害的,因为在任何
我正在尝试利用 Hibernate,并尝试通过利用 API SessionFactory 提供的 getCurrentSession() 来避免 session 管理。据我了解,这将为我管理 sess
我正在尝试使用 generic-dao ( http://code.google.com/p/hibernate-generic-dao/ )。但是,在我的 HibernateBaseDAO 中,ge
通过 SessionFactory.getCurrentSession() 获取 Hibernate session 是否线程安全?假设我有一个 static SessionFactory 对象用于我
我正在使用 hibernate 和 jsp/servlet 编写一个基于 Web 的应用程序。我已经阅读了 sessionFactory.getCurrentSession 和 sessionFact
我有一个问题,当我在 DAO 文件中调用 addCus() 方法时,我得到 NullPointerException。我尝试了很多解决方案,但仍然出现此错误。为什么 getCurrentSession
在Hibernate4中,Spring4 我想使用没有sessionFactory.getCurrentSession()批注的@Transactional。有什么办法吗? 最佳答案 简单的答案是:是
我正在使用 Maven、Spring 和 Hibernate 做一个基于 Web 的项目。我刚刚遇到了一个问题。问题是每当我使用 sessionFactory.getCurrentSession()
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 6 年前。 当我将文件作为 JUnit 测试
我正在单元测试中全面测试一个实体,到目前为止几乎一切正常:创建、更新、列表。但是,当我尝试删除一条记录时,它并没有被删除。这是我正在使用的代码: public void delete (Integ
我有一个简单的 Java Web 应用程序,它从数据库接收一些信息并在 Web 浏览器中显示该信息。 Hibernate 用于与 servlet 和 jsp 文件中的数据库进行交互。一切都如我所愿,但
这个问题在这里已经有了答案: Hibernate openSession() vs getCurrentSession() (5 个答案) 关闭 6 年前。 OpenSession() 总是打开一个
您好,我已经使用 hibernate 配置了带有事务管理器的 sessionFactory 和 MysqL 数据源。当我尝试在 openSession() 之后立即对该工厂调用 getCurrentS
这是我的代码: hibernate .cfg.xml com.mysql.jdbc.Driver jdbc:mysql://localhost:3306
我是 N hibernate 的新手。我在我的应用程序中使用 n hibernate 。我编写的代码运行成功但有点慢,因为当我检查 hibernate 分析器时,它向我展示了进程缓慢的一些原因。“每个
Servlet 3.0 异步 API 的内部指定 Servlet 由线程多路复用器池处理。 getCurrentSession 的行为是什么?它会让 session 保持打开状态,直到多路复用器线程因
因此,我在事务内部使用 Hibernate SessionFactory 及其 getCurrentSession 方法已经有一段时间了。 Session session = sessionFacto
我是一名优秀的程序员,十分优秀!