Struts + Hibernate:@SessionTarget无效

我正在使用struts2-fullhibernatecore-plugin-2.2.2-GA.jar在我的DAO类中注入一个session ,如下所示:

 public class UserDAO { @SessionTarget Session session; @TransactionTarget Transaction transaction; public List 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) ... 

根据调试输出, UserDAO中的sessiontransactionnull

一些文件供参考:

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

 public class UserListAction extends ActionSupport { private List users; private UserDAO userDAO = new UserDAO(); @Override public String execute() throws Exception { users = userDAO.getUsers(); return SUCCESS; } } 

hibernate.cfg.xml

     org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/sample?zeroDateTimeBehavior=convertToNull root 10    

如果要使用Hibernate会话和事务注入function,则操作映射包需要扩展包hibernate-default

有关hibernate-default包的更多细节

该插件提供了一个名为hibernate-default的映射包。 这有三个拦截器堆栈,用于注入function:

  • basicStackHibernate :像Struts2 basickStack (无validation!),但具有Hibernate会话和事务注入function。

  • defaultStackHibernate :与Struts2 defaultStack类似,但没有Struts2validation方法(注释和XML)。 而是使用Hibernatevalidation框架。

  • defaultStackHibernateStrutsValidation :Struts2 defaultStack + plugin的basicStackHibernate

这个包扩展了hibernate-default包,因此如果需要,可以使用所有默认的Struts2配置。

hibernate-default包是抽象的,所以你可以用其他包来扩展它。 例如:

  

要使用带有注释配置的hibernate-default

 @ParentPackage("hibernate-default") @InterceptorRef("basicStackHibernate") public class YourAction extends ActionSupport {}