当前位置: 首页 > 面试题库 >

Struts +休眠:@SessionTarget不起作用

澹台鸿光
2023-03-14
问题内容

我正在像下面这样在我的DAO类中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并且transactionUserDAOnull

一些文件供参考:

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>

问题答案:

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

有关hibernate-default包装的更多详细信息

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

  • basicStackHibernate:类似于Struts2 basickStack(无需验证!),但具有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 {}


 类似资料:
  • 问题内容: 我知道,问题已经发布了无数次,因此,如果有相同的问题(我还没有找到),请给我链接或建议。 我的数据库(和)中有两个表,两个POJO Hibernate类(和)。 我想在单个列表对象的jsp中显示这两个表中的字段,因此我决定使用。这两个表由字段(这是的主键)连接在一起,我希望from中的from 与from中的字段一起显示。在由该注释之前: 我将此属性添加到了(带有getter和sett

  • 问题内容: 我在使用Spring进行休眠验证时遇到一些问题。我已经按照在线教程中的说明进行了所有操作,但是它不起作用,我只是转到下一页而没有验证错误。 控制器: 客户form.jsp 因此,当我的lastName为空字段时,BindingResult中没有错误。我究竟做错了什么? 问题答案: 如果您的类路径尚不存在,请添加它。如果您正在使用任何构建工具,例如或仅添加到依赖项。 例如: 摇篮: Ma

  • 问题内容: 我已经创建了一个UserType(请参见下文)来处理mySQL数据库中的一种情况,在该情况下我们将空日期保存为0000-00-00 00:00:00。 当我尝试使用dispDT的null持久化我的实体时(请参见下文),它将生成以下异常:“ javax.persistence.PersistenceException:org.hibernate.PropertyValueExceptio

  • 问题内容: Oracle 10g,休眠3.4 此更新(基于值)正确完成: 这个(基于值)抛出异常: 有人知道为什么吗? 问题答案: Hibernate文档说: 批量HQL查询中不能指定隐式或显式连接。子查询可以在where子句中使用,其中子查询本身可能包含联接。 因此,您需要用等效的子查询替换隐式连接:

  • 问题内容: Oracle 10g,hibernate3.4 此更新(基于值)正确完成: 这个(基于值)抛出异常: 有人知道为什么吗? 问题答案: Hibernate文档说: 批量HQL查询中不能指定隐式或显式连接。子查询可以在where子句中使用,其中子查询本身可能包含联接。 因此,您需要用等效的子查询替换隐式连接:

  • 问题内容: 我在上面解释了错误,并做了一些研究,发现这是解决方案。但是它不适用于我的应用程序。数据加载到jqGrid期间发生错误。 Struts2动作类: 服务层获取org方法: DAO方法: } web.xml Struts.xml: 错误堆栈: 问题答案: 您应该仅将要在网格中显示的那些属性序列化为JSON。可以通过不同的方式来实现: 1)将要使用参数序列化的属性限制为json结果 2)通过j