2012-05-04 111 views
0

我是新来的sturts2和hibernate框架。我正在测试Web应用程序。我有一个模型类'UserDetails'一个DAO类一个DAO和动作类的实现。和保存对象数据库的时候,我发现了以下错误:无法使用休眠功能将对象保存到数据库

UserDetails.class

package org.project.model; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="user_details") 
public class UserDetails { 

private int userId; 
private String userName; 

@Id 
@GeneratedValue 
@Column(name="id") 
public int getUserId() { 
    return userId; 
} 

public void setUserId(int userId) { 
    this.userId = userId; 
} 

@Column(name="name") 
public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 
} 

UserDetailsDaoImpl - 实现类

package org.project.model.dao.iml; 

import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 
import org.project.model.UserDetails; 
import org.project.model.dao.UserDetailsDao; 

import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget; 
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget; 

public class UserDetailsDaoImpl implements UserDetailsDao { 

    @SessionTarget 
    Session session; 
    @TransactionTarget 
    Transaction transaction; 

    @Override 
    public void saveUser(UserDetails user) { 
     try { 
      session.save(user); 
     } catch (Exception e) { 
      transaction.rollback(); 
      e.printStackTrace(); 
     } 
    } 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<UserDetails> listUser() { 
     List<UserDetails> users = null; 
     try { 
      users = session.createQuery("from UserDetails").list(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return users; 
    } 
} 

Action类是

package org.project.actions; 

import java.util.ArrayList; 
import java.util.List; 

import org.project.model.UserDetails; 
import org.project.model.dao.UserDetailsDao; 

import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 

public class UserAction extends ActionSupport implements ModelDriven<UserDetails>{ 

private static final long serialVersionUID = -2167265047934268752L; 

private UserDetails user = new UserDetails(); 
private UserDetailsDao userDao; 
private List<UserDetails> userList = new ArrayList<UserDetails>(); 

@Override 
public UserDetails getModel(){ 
    return user; 
} 

public String add() { 
    userDao.saveUser(user); 
    return SUCCESS; 
} 

public String list() { 
    userList = userDao.listUser(); 
    return SUCCESS; 
} 

public String execute(){ 
    return SUCCESS; 
} 

/* With all setter and getter methods */ 

和当我按下保存按钮时发生以下错误

java.lang.NullPointerException 
org.project.actions.UserAction.add(UserAction.java:26) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440) 
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 
com.googlecode.s2hibernate.struts2.plugin.s2hibernatevalidator.interceptor.HibernateValidatorInterceptor.intercept(HibernateValidatorInterceptor.java:77) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138) 
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
com.googlecode.s2hibernate.struts2.plugin.interceptors.SessionTransactionInjectorInterceptor.intercept(SessionTransactionInjectorInterceptor.java:157) 
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236) 
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) 
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468) 
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) 
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(Stru  tsPrepareAndExecuteFilter.java:76) 

什么也许错了吗?提前致谢。

+3

你在UserAction.java的第26行有错误。这是堆栈跟踪告诉你的。既然你是唯一知道这行代码做什么的人,我看不出我们可以提供什么帮助。 –

+0

现在我已经发布了我正在使用的课程。 – tuazku

回答

2

第26行是做

userDao.saveUser(user); 

,它抛出一个NullPointerException异常。这意味着不应该为null的内容为null。这行代码中可能为null?当然是userDao

你是否在某处初始化了userDao?号线

private UserDetailsDao userDao; 

相当于

private UserDetailsDao userDao = null; 

初始化您userDao变量。

+0

非常感谢。现在正在工作。 – tuazku

+0

非常感谢。面对类似的问题,忘记初始化一个变量为null。你的回答有帮助。 – Makarand

相关问题