Java 使用Struts 2和Hibernate在数据库中插入空值

Java 使用Struts 2和Hibernate在数据库中插入空值,java,mysql,struts2,dao,hibernate-4.x,Java,Mysql,Struts2,Dao,Hibernate 4.x,我正在使用Struts 2和Hibernate集成应用程序在数据库中插入值。但在从表单字段插入值之后,只有null值保存在数据库中 这是我的表单JSP文件: employee.jsp: <%@ taglib uri ="/struts-tags" prefix="s"%> <html> <head> <meta http-equiv="Content-Type" content="t

我正在使用Struts 2和Hibernate集成应用程序在数据库中插入值。但在从表单字段插入值之后,只有
null
值保存在数据库中

这是我的表单JSP文件:

employee.jsp

<%@ taglib  uri ="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="employee" method="post">
<s:textfield name ="name" label="ENTER your name"/>
<s:textfield name="address" label="Enter Address"/>
<s:submit label="submit">submit</s:submit>

</s:form>
</body>
</html>
package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;


import javax.persistence.Id;
@Entity

public class Empmodel {
@Id @GeneratedValue
private int serialno;
private String name;
private String address;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}   
}
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ConnectionFactory {


private static  SessionFactory  sessionfactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
    
    
    Configuration config =null;
     SessionFactory sf  =null;
    try{
        config= new Configuration().configure();
        ServiceRegistry servicereg = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
                
                sf= config.buildSessionFactory(servicereg); 
        
        
    }
    catch(Throwable e){
        System.out.println("Initial session factory creation failed"+ e);
        throw new ExceptionInInitializerError(e);
    }
    return sf;
}
 public static SessionFactory getSessionFactory(){
    return sessionfactory;
    }}
import model.Empmodel;
import org.hibernate.Session;

public class Empdao {

public Empmodel add(){
    Empmodel model = new Empmodel();
    Session session=ConnectionFactory.getSessionFactory().getCurrentSession();
    
    session.beginTransaction();
    
    session.save(model);
    session.getTransaction().commit();
    return model;
}
}
import model.Empmodel;

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

import dao.Empdao;

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {
    private static final long serialVersionUID = 1L;
    private Empmodel model;
    
    
        public String execute() throws Exception{
            Empdao empdao = new Empdao();
            Empmodel queryresult =  empdao.add();
        
            if(queryresult != null) {
                return SUCCESS; 
            }
            else
                return ERROR;   
        }
        @Override
        public Empmodel getModel() {
            // TODO Auto-generated method stub
            return model;
        }
    }
Connectionfactory.java

<%@ taglib  uri ="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="employee" method="post">
<s:textfield name ="name" label="ENTER your name"/>
<s:textfield name="address" label="Enter Address"/>
<s:submit label="submit">submit</s:submit>

</s:form>
</body>
</html>
package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;


import javax.persistence.Id;
@Entity

public class Empmodel {
@Id @GeneratedValue
private int serialno;
private String name;
private String address;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}   
}
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ConnectionFactory {


private static  SessionFactory  sessionfactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
    
    
    Configuration config =null;
     SessionFactory sf  =null;
    try{
        config= new Configuration().configure();
        ServiceRegistry servicereg = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
                
                sf= config.buildSessionFactory(servicereg); 
        
        
    }
    catch(Throwable e){
        System.out.println("Initial session factory creation failed"+ e);
        throw new ExceptionInInitializerError(e);
    }
    return sf;
}
 public static SessionFactory getSessionFactory(){
    return sessionfactory;
    }}
import model.Empmodel;
import org.hibernate.Session;

public class Empdao {

public Empmodel add(){
    Empmodel model = new Empmodel();
    Session session=ConnectionFactory.getSessionFactory().getCurrentSession();
    
    session.beginTransaction();
    
    session.save(model);
    session.getTransaction().commit();
    return model;
}
}
import model.Empmodel;

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

import dao.Empdao;

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {
    private static final long serialVersionUID = 1L;
    private Empmodel model;
    
    
        public String execute() throws Exception{
            Empdao empdao = new Empdao();
            Empmodel queryresult =  empdao.add();
        
            if(queryresult != null) {
                return SUCCESS; 
            }
            else
                return ERROR;   
        }
        @Override
        public Empmodel getModel() {
            // TODO Auto-generated method stub
            return model;
        }
    }
Empdao
是:

<%@ taglib  uri ="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="employee" method="post">
<s:textfield name ="name" label="ENTER your name"/>
<s:textfield name="address" label="Enter Address"/>
<s:submit label="submit">submit</s:submit>

</s:form>
</body>
</html>
package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;


import javax.persistence.Id;
@Entity

public class Empmodel {
@Id @GeneratedValue
private int serialno;
private String name;
private String address;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}   
}
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ConnectionFactory {


private static  SessionFactory  sessionfactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
    
    
    Configuration config =null;
     SessionFactory sf  =null;
    try{
        config= new Configuration().configure();
        ServiceRegistry servicereg = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
                
                sf= config.buildSessionFactory(servicereg); 
        
        
    }
    catch(Throwable e){
        System.out.println("Initial session factory creation failed"+ e);
        throw new ExceptionInInitializerError(e);
    }
    return sf;
}
 public static SessionFactory getSessionFactory(){
    return sessionfactory;
    }}
import model.Empmodel;
import org.hibernate.Session;

public class Empdao {

public Empmodel add(){
    Empmodel model = new Empmodel();
    Session session=ConnectionFactory.getSessionFactory().getCurrentSession();
    
    session.beginTransaction();
    
    session.save(model);
    session.getTransaction().commit();
    return model;
}
}
import model.Empmodel;

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

import dao.Empdao;

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {
    private static final long serialVersionUID = 1L;
    private Empmodel model;
    
    
        public String execute() throws Exception{
            Empdao empdao = new Empdao();
            Empmodel queryresult =  empdao.add();
        
            if(queryresult != null) {
                return SUCCESS; 
            }
            else
                return ERROR;   
        }
        @Override
        public Empmodel getModel() {
            // TODO Auto-generated method stub
            return model;
        }
    }
动作
类为:

<%@ taglib  uri ="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="employee" method="post">
<s:textfield name ="name" label="ENTER your name"/>
<s:textfield name="address" label="Enter Address"/>
<s:submit label="submit">submit</s:submit>

</s:form>
</body>
</html>
package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;


import javax.persistence.Id;
@Entity

public class Empmodel {
@Id @GeneratedValue
private int serialno;
private String name;
private String address;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}   
}
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ConnectionFactory {


private static  SessionFactory  sessionfactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
    
    
    Configuration config =null;
     SessionFactory sf  =null;
    try{
        config= new Configuration().configure();
        ServiceRegistry servicereg = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
                
                sf= config.buildSessionFactory(servicereg); 
        
        
    }
    catch(Throwable e){
        System.out.println("Initial session factory creation failed"+ e);
        throw new ExceptionInInitializerError(e);
    }
    return sf;
}
 public static SessionFactory getSessionFactory(){
    return sessionfactory;
    }}
import model.Empmodel;
import org.hibernate.Session;

public class Empdao {

public Empmodel add(){
    Empmodel model = new Empmodel();
    Session session=ConnectionFactory.getSessionFactory().getCurrentSession();
    
    session.beginTransaction();
    
    session.save(model);
    session.getTransaction().commit();
    return model;
}
}
import model.Empmodel;

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

import dao.Empdao;

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {
    private static final long serialVersionUID = 1L;
    private Empmodel model;
    
    
        public String execute() throws Exception{
            Empdao empdao = new Empdao();
            Empmodel queryresult =  empdao.add();
        
            if(queryresult != null) {
                return SUCCESS; 
            }
            else
                return ERROR;   
        }
        @Override
        public Empmodel getModel() {
            // TODO Auto-generated method stub
            return model;
        }
    }
导入模型.Empmodel;
导入com.opensymphony.xwork2.ActionSupport;
导入com.opensymphony.xwork2.ModelDriven;
导入dao.Empdao;
公共类Empaction扩展ActionSupport实现模型驱动{
私有静态最终长serialVersionUID=1L;
私有模式;
公共字符串execute()引发异常{
Empdao Empdao=新的Empdao();
Empmodel queryresult=empdao.add();
if(queryresult!=null){
回归成功;
}
其他的
返回误差;
}
@凌驾
公共模型getModel(){
//TODO自动生成的方法存根
收益模型;
}
}

如果你想先得到一些东西,你需要先放一些东西。这条规则在任何地方都适用。在代码中,需要将模型对象放在DAO中。然后DAO将使用通过拦截器在模型中填充的值将其保存到db。比如说

Empmodel queryresult = empdao.add(model); 
为此,您需要更改方法签名以添加
model
的参数

这件事看起来很琐碎,但是您需要删除在方法实现中重新创建
模型的语句,因为它不能正常工作。在开始事务之前,还要确保模型不是空的

DAO中的
save
方法应该检查是否创建了具有
id
值的
null
新对象

if (model.getId() == null)
  session.save(model);
else
  session.update(model);
}


进行这些更改后,应用程序将直接进入成功页面,而不进行任何数据库活动。您能为我的Empaction.java类和Empdao.java类编写代码吗?这样会更有帮助。日志中有哪些错误?什么是
hiberate.cfg.xml
?您是否测试了数据库连接、架构创建、用户创建和访问权限?无论如何,如果保存新模型或空模型,这些更改将毫无价值。规则是相反的,如果你什么都不放,那么你什么都得不到。那么如何把一些东西放在模型上你能给我一些规则吗likns@tom添加了一些链接,如果要使用hibernate4,则需要对配置进行一些更改。