Struts + Hibernate: @SessionTarget не работает
Я использую struts2-fullhibernatecore-plugin-2.2.2-GA.jar
ввести session
в моем классе DAO, как показано ниже:
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
,
Некоторые файлы для справки:
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>
1 ответ
Если вы хотите использовать возможность внедрения Hibernate Session и Transaction, ваш пакет отображения действий должен расширить пакет hibernate-default
,
Подробнее о hibernate-default
пакет
Плагин предоставляет пакет сопоставления под названием hibernate-default
, И это имеет три стека перехватчиков, указанных для возможностей инъекции:
basicStackHibernate
: Нравится Struts2basickStack
(НИКАКИХ проверок!), Но с возможностью Hibernate-сессии и внедрения транзакций.defaultStackHibernate
: Нравится Struts2defaultStack
, но без методов проверки Struts2 (аннотации и XML). Вместо этого использует фреймворк Hibernate Validation.defaultStackHibernateStrutsValidation
: Struts2defaultStack
+ плагин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 {}