我正在像下面这样在我的DAO类中struts2-fullhibernatecore-plugin-2.2.2-GA.jar注入一个session:
struts2-fullhibernatecore-plugin-2.2.2-GA.jar
session
public class UserDAO { @SessionTarget Session session; @TransactionTarget Transaction transaction; public List<User> getUsers() { return session.createQuery("from user").list(); } }
但是我得到了
java.lang.NullPointerException com.wudi.DAO.UserDAO.getUsers(UserDAO.java:28) com.wudi.action.UserListAction.execute(UserListAction.java:24) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) ...
根据调试输出,session并且transaction在UserDAO是null。
transaction
UserDAO
null
一些文件供参考:
User.java :
User.java
@Entity @Table(name = "user") public class User implements Serializable { @Id @GeneratedValue private int id; @Column private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
UserListAction.java :
UserListAction.java
public class UserListAction extends ActionSupport { private List<User> users; private UserDAO userDAO = new UserDAO(); @Override public String execute() throws Exception { users = userDAO.getUsers(); return SUCCESS; } }
hibernate.cfg.xml :
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sample?zeroDateTimeBehavior=convertToNull</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.pool_size">10</property> <mapping class="com.wudi.model.User" /> </session-factory> </hibernate-configuration>
如果要使用Hibernate会话和事务注入功能,则操作映射包需要扩展该包hibernate-default。
hibernate-default
有关hibernate-default包装的更多详细信息
该插件提供了一个名为的映射包hibernate-default。它具有三个指示注入功能的拦截器堆栈:
basicStackHibernate:类似于Struts2 basickStack(无需验证!),但具有Hibernate会话和事务注入功能。
basicStackHibernate
basickStack
defaultStackHibernate:类似于Struts2 defaultStack,但没有Struts2验证方法(注释和XML)。改用Hibernate Validation框架。
defaultStackHibernate
defaultStack
defaultStackHibernateStrutsValidation:Struts2 defaultStack+插件的basicStackHibernate。
defaultStackHibernateStrutsValidation
该软件包扩展了该hibernate-default软件包,因此如果需要,可以使用所有默认的Struts2配置。
hibernate-default包是抽象的,因此您可以将其与其他扩展。例如:
<package name="default" extends="hibernate-default,json-default" >
要hibernate-default与注释配置一起使用,请使用
@ParentPackage("hibernate-default") @InterceptorRef("basicStackHibernate") public class YourAction extends ActionSupport {}