Java Hibernate查询时出现空指针异常
我正在尝试执行一个hibernate查询,我使用的是JSF2PrimeFaces、SpringSecurity3和Hibernate4。我已经检查了hibernate是否与数据库通信,因为它能够在启动程序时自动创建表 我尝试获取当前会话,并在执行查询时创建会话,但我不知道这是否是原因。我已经搜索并尝试了所有可能的解决方案,但没有找到一个。 我总是遇到以下错误: 错误:Java Hibernate查询时出现空指针异常,java,hibernate,jsf-2,primefaces,spring-security,Java,Hibernate,Jsf 2,Primefaces,Spring Security,我正在尝试执行一个hibernate查询,我使用的是JSF2PrimeFaces、SpringSecurity3和Hibernate4。我已经检查了hibernate是否与数据库通信,因为它能够在启动程序时自动创建表 我尝试获取当前会话,并在执行查询时创建会话,但我不知道这是否是原因。我已经搜索并尝试了所有可能的解决方案,但没有找到一个。 我总是遇到以下错误: 错误: Query query = sessionFactory.getCurrentSession().createQuery(
Query query = sessionFactory.getCurrentSession().createQuery(
"from Holas");
@Named
@Scope("session")
public class HolasBean{
HolasBo holasBo;
HolasDao holasDao;
public void setUserBo(HolasBo holasBo) {
this.holasBo = holasBo;
}
public String printMsgFromSpring() { //This works
return "HOla";
}
public String getMessage(){ //Null pointer exception
return holasDao.getMessageHiber();
}
com.sun.faces.mgbean.ManagedBeanCreationException:无法在com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:193)上实例化类:core.bean.HolasBean
在com.sun.faces.mgbean.BeanBuilder.build(BeanBuilder.java:102)上
在com.sun.faces.mgbean.BeanManager.createAndPush(BeanManager.java:409)上
在com.sun.faces.mgbean.BeanManager.create(BeanManager.java:269)上
位于com.sun.faces.el.ManagedBeanELResolver.resolveBean(ManagedBeanELResolver.java:244)
在com.sun.faces.el.ManagedBeanELResolver.getValue(ManagedBeanELResolver.java:116)上
原因:java.lang.NullPointerException
位于core.bean.HolasBean(HolasBean.java:22)
第22行是查询:
Query query = sessionFactory.getCurrentSession().createQuery(
"from Holas");
@Named
@Scope("session")
public class HolasBean{
HolasBo holasBo;
HolasDao holasDao;
public void setUserBo(HolasBo holasBo) {
this.holasBo = holasBo;
}
public String printMsgFromSpring() { //This works
return "HOla";
}
public String getMessage(){ //Null pointer exception
return holasDao.getMessageHiber();
}
使用可能的最简单示例进行测试:
荷兰豆:
Query query = sessionFactory.getCurrentSession().createQuery(
"from Holas");
@Named
@Scope("session")
public class HolasBean{
HolasBo holasBo;
HolasDao holasDao;
public void setUserBo(HolasBo holasBo) {
this.holasBo = holasBo;
}
public String printMsgFromSpring() { //This works
return "HOla";
}
public String getMessage(){ //Null pointer exception
return holasDao.getMessageHiber();
}
HolasDao
@Repository
public class HolasDaoImpl implements HolasDao {
@Autowired
private SessionFactory sessionFactory;
public String getMessageHiber() {
List<Holas> holas = new ArrayList<Holas>();
holas = sessionFactory.getCurrentSession().createQuery("from Holas").list();
return holas.get(0).toString();
}
}
XHTML
<h:body>
<h1>JSF 2.0 + Spring Example</h1>
#{holasBean.printMsgFromSpring()} //This is working
#{holasBean.getMessage()} //Null Pointer Exception
</h:body>
JSF2.0+Spring示例
#{holasBean.printMsgFromSpring()}//这正在工作
#{holasBean.getMessage()}//空指针异常
*编辑*:
Sergey当我发表评论时,我在网站上看到这个错误:
在core.bean.HolasBean类型中找不到属性“holas”
配置文件,以备需要:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
<display-name>Project Name</display-name>
<!-- Spring Context Configuration' s Path definition -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- SPRING SECURITY -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring listener. It is registered to Servlet Container -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- Project Stage Level -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome Page -->
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Mapping for the http requests. -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http:...
<!-- SPRING SECURITY -->
<security:http use-expressions="true">
<security:intercept-url pattern="/secured/*" access="isAuthenticated()"/>
<security:form-login login-page="/index.xhtml" authentication-failure-url="/malvamos" default-target-url="/aleadormir"/>
<security:logout logout-success-url="/index"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userServiceImpl" />
</security:authentication-manager>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<mvc:annotation-driven />
<task:annotation-driven />
<context:annotation-config/>
<context:component-scan base-package="core" />
<!-- TRANSACTION MANAGERS -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- DATA SOURCES -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/connection.properties" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${cnn.driver}" />
<property name="url" value="${cnn.url}" />
<property name="username" value="${cnn.username}" />
<property name="password" value="${cnn.password}" />
</bean>
<!-- SESSION FACTORIES -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="configLocation">
<value>/WEB-INF/hibernate-config.xml</value>
</property>
<property name="annotatedClasses">
<list>
<value>core.model.Permission</value>
<value>core.model.Role</value>
<value>core.model.UserEntity</value>
<value>core.model.Holas</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${cnn.dialect}
</prop>
</props>
</property>
</bean>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>web</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name> Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<hibernate.version>4.1.7.Final</hibernate.version>
<spring.version>3.1.1.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SPRING SECURITY -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSF dependencies -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Primefaces dependency -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>4.0</version>
</dependency>
<!-- Hibernate dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.7.Final</version>
</dependency>
<!-- MySQL Java Connector dependency -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<!-- c3p0 dependency -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories>
<build>
<finalName>gesmo</finalName>
</build>
</project>
项目名称
上下文配置位置
/WEB-INF/applicationContext.xml
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
/*
org.springframework.web.context.ContextLoaderListener
org.springframework.web.context.request.RequestContextListener
javax.faces.PROJECT_阶段
发展
index.xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.jsf
Facesservlet
*.面孔
Facesservlet
*.xhtml
aplicationConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID"
version="2.5">
<display-name>Project Name</display-name>
<!-- Spring Context Configuration' s Path definition -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- SPRING SECURITY -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Spring listener. It is registered to Servlet Container -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- Project Stage Level -->
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<!-- Welcome Page -->
<welcome-file-list>
<welcome-file>index.xhtml</welcome-file>
</welcome-file-list>
<!-- JSF Servlet -->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Mapping for the http requests. -->
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http:...
<!-- SPRING SECURITY -->
<security:http use-expressions="true">
<security:intercept-url pattern="/secured/*" access="isAuthenticated()"/>
<security:form-login login-page="/index.xhtml" authentication-failure-url="/malvamos" default-target-url="/aleadormir"/>
<security:logout logout-success-url="/index"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userServiceImpl" />
</security:authentication-manager>
<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" />
<mvc:annotation-driven />
<task:annotation-driven />
<context:annotation-config/>
<context:component-scan base-package="core" />
<!-- TRANSACTION MANAGERS -->
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- DATA SOURCES -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/connection.properties" />
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${cnn.driver}" />
<property name="url" value="${cnn.url}" />
<property name="username" value="${cnn.username}" />
<property name="password" value="${cnn.password}" />
</bean>
<!-- SESSION FACTORIES -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource"/></property>
<property name="configLocation">
<value>/WEB-INF/hibernate-config.xml</value>
</property>
<property name="annotatedClasses">
<list>
<value>core.model.Permission</value>
<value>core.model.Role</value>
<value>core.model.UserEntity</value>
<value>core.model.Holas</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
${cnn.dialect}
</prop>
</props>
</property>
</bean>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>web</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name> Maven Webapp</name>
<url>http://maven.apache.org</url>
<properties>
<hibernate.version>4.1.7.Final</hibernate.version>
<spring.version>3.1.1.RELEASE</spring.version>
</properties>
<dependencies>
<!-- Spring 3 dependencies -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- SPRING SECURITY -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSF dependencies -->
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Primefaces dependency -->
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>4.0</version>
</dependency>
<!-- Hibernate dependencies -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.1.7.Final</version>
</dependency>
<!-- MySQL Java Connector dependency -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<!-- c3p0 dependency -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>prime-repo</id>
<name>PrimeFaces Maven Repository</name>
<url>http://repository.primefaces.org</url>
<layout>default</layout>
</repository>
</repositories>
<build>
<finalName>gesmo</finalName>
</build>
</project>
当您注释这一行(22)时,您没有错误?请尝试调试并在第22行设置断点。这将允许您查看导致异常的实际原因,并让您缩小问题范围。我编辑了评论这句话的帖子,现在我将尝试使debuggingI cant debbug我已经尝试过,但它是一个webapp maven项目,我无法eclipse或尝试调试远程webapp I cant。