【问题标题】:Struts + Hibernate: @SessionTarget not workingStruts + Hibernate:@SessionTarget 不工作
【发布时间】:2014-04-28 06:45:41
【问题描述】:

我正在使用struts2-fullhibernatecore-plugin-2.2.2-GA.jar 在我的 DAO 类中注入 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)
  ...

根据调试输出,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<User> users;
    private UserDAO userDAO = new UserDAO();

    @Override
    public String execute() throws Exception {
        users = userDAO.getUsers();
        return SUCCESS;
    }

}

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>

【问题讨论】:

    标签: java mysql hibernate struts2 dao


    【解决方案1】:

    如果你想使用 Hibernate Session 和 Transaction 注入能力,你的动作映射包需要扩展包hibernate-default

    更多关于hibernate-default包的细节

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

    • basicStackHibernate:类似于 Struts2basickStack(无验证!),但具有 Hibernate 会话和事务注入功能。

    • defaultStackHibernate:类似于 Struts2 defaultStack,但没有 Struts2 验证方法(注释和 XML)。改用 Hibernate Validation 框架。

    • defaultStackHibernateStrutsValidation: Struts2 defaultStack+ 插件的basicStackHibernate

    此包扩展了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 {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多