org.hibernate.exception.ConstraintViolationException:无法执行语句 [英] org.hibernate.exception.ConstraintViolationException: could not execute statement

查看:102
本文介绍了org.hibernate.exception.ConstraintViolationException:无法执行语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,情况就是这样..我正在使用struts2和hibernate创建一个Web应用程序。我正在创建一个用户可以更改密码的更改密码页面。但我得到错误为 org.hibernate.exception.ConstraintViolationException:无法执行语句..下面是我的代码和堆栈跟踪。


// JSP




  <%@ page contentType =text / htmlpageEncoding =UTF-8%> 
<%@ taglib prefix =suri =/ struts-tags%>
<!DOCTYPE html>
< html>
< head>
< meta http-equiv =Content-Typecontent =text / html; charset = UTF-8>
< title> H2H:更改密码< / title>
< / head>
< body>
< s:textfield name =unamelabel =用户名/>
< s:密码名称=opwdlabel =旧密码/>
< s:密码名称=npwdlabel =新密码/>
< s:password name =cpwdlabel =确认密码/>
< s:submit name =更改密码align =center/>
< / s:form>
< / body>
< / html>




// hibernate.cfg.xml



 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE hibernate-configuration PUBLIC - // Hibernate / Hibernate Configuration DTD 3.0 // ENhttp://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">
< hibernate-configuration>
< session-factory>
< property name =hibernate.connection.driver_class> com.microsoft.sqlserver.jdbc.SQLServerDriver< / property>
< property name =hibernate.connection.url> jdbc:sqlserver://192.168.100.25:1433; databaseName = db_h2h< / property>
< property name =hibernate.connection.username> sa< / property>
< property name =hibernate.connection.password> 123< / property>
< property name =hibernate.dialect> org.hibernate.dialect.SQLServerDialect< / property>
< property name =hibernate.show_sql> true< / property>
< property name =hibernate.hbm2ddl.auto>更新< / property>
< mapping resource =hibernate.hbm.xmlclass =example.Login/>
< mapping resource =pass.hbm.xmlclass =example.Pass/>
< / session-factory>
< / hibernate-configuration>




// pass.hbm.xml




 <?xml version =1.0encoding =UTF-8?> 
<!DOCTYPE hibernate-mapping PUBLIC - // Hibernate / Hibernate Mapping DTD 3.0 // ENhttp://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
< hibernate-mapping>
name =example.Passoptimistic-lock =versionpolymorphism =implicit
select-before-update =falsetable =masters.tbl_users>
< id name =empidtype =int>
< column name =empid/>
< generator class =assigned/>
< / id>
< property name =empnametype =java.lang.String>
< column name =empname/>
< / property>
< property name =newpwdtype =java.lang.String>
< column name =pass/>
< / property>
< / class>
< / hibernate-mapping>




// struts.xml




 <!DOCTYPE struts PUBLIC 
- // Apache Software Foundation // DTD Struts Configuration 2.0 // EN
http://struts.apache.org/dtds/struts-2.0.dtd\">

< struts>

< package name =subinnamespace =extends =struts-default>

< result name =success> /index.jsp< / result>
< / action>

< result name =success> /changepass.jsp< / result>
< / action>

< result name =success> /dashboard.jsp< / result>
< / action>

< result name =success> /dash.jsp< / result>
< result name =fail> /fail.jsp< / result>
< / action>

< result name =success> /dash.jsp< / result>
< result name =fail> /fail.jsp< / result>
< result name =input> /fail.jsp< / result>
< / action>
< / package>

< / struts>




// POJO类(Pass.java)




 包示例; 

public class Pass {
private int empid;
private String empname;
private String oldpwd;
私人字符串newpwd;
私人字符串cnfpwd;

public int getEmpid(){
return empid;
}

public void setEmpid(int empid){
this.empid = empid;
}

public String getEmpname(){
return empname;
}

public void setEmpname(String empname){
this.empname = empname;
}

public String getOldpwd(){
return oldpwd;
}

public void setOldpwd(String oldpwd){
this.oldpwd = oldpwd;
}

public String getNewpwd(){
return newpwd;
}

public void setNewpwd(String newpwd){
this.newpwd = newpwd;
}

public String getCnfpwd(){
return cnfpwd;
}

public void setCnfpwd(String cnfpwd){
this.cnfpwd = cnfpwd;
}

}




// ActionSupport Class(PassAction.java)




  package example; 

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
导入org.hibernate.cfg.Configuration;


public class PassAction扩展ActionSupport implements ModelDriven< Pass> {

Pass pass = new Pass();
$ b $ public PassAction(){
}

public String execute()throws Exception {
SessionFactory sessionFactory = new Configuration()。configure()。 buildSessionFactory();
Session session = sessionFactory.openSession();
Transaction t = session.beginTransaction();
System.out.println(transx+ t);

String hql =UPDATE Pass set newpwd =:password WHERE empid =:id;
Query query = session.createQuery(hql);
query.setParameter(password,pass.getNewpwd());
query.setParameter(id,pass.getEmpid());
int res = query.executeUpdate();

System.out.println(行更新:+ res);

query.setMaxResults(1);
t.commit();




Pass p =(Pass)query.uniqueResult();
if(p == null){
returnfail;
}
返回成功;

}

public Pass getModel(){
return pass;
}

}




//ShowPassAction.java



 包示例; 

import com.opensymphony.xwork2.ActionSupport;

public class ShowPassAction extends ActionSupport {
$ b $ public ShowPassAction(){
}

public String execute()throws Exception {
返回成功;
}

}




// Stack trace




 错误:无法将NULL值插入'Pass'列, 'DB_H2H.Masters.tbl_Users';列不允许有空值。更新失败。 
严重:187355 [http-listener-1(5)] ERROR org.apache.struts2.dispatcher.Dispatcher - 处理请求期间发生异常:无法执行语句
严重:org.hibernate.exception。 ConstraintViolationException:在org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java在org.hibernate.exception.internal.SQLStateConversionDelegate.convert无法执行的语句
(SQLStateConversionDelegate.java:129)
: 49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor。 java:109)
在org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:78)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:445)
at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:347)
at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1282)
at org.hibernate.internal.QueryImpl.executeUpdate(QueryImpl.java:118)
at example.PassAction.execute (PassAction.java:37)
at sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect .DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java :450)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
at com.opensymphony.xwork 2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
at com.opensymphony.xwork2.DefaultActionInvocation。调用(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor。 java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
处com.opensymphony.xwork2 com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
。 DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept( MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)

在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
。在COM .opensymphon y.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
处org.apache.struts2.interceptor com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
。 MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor。 java:91)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
。在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
在com.opensymphony .xwork2.DefaultActionInvocation.invoke(d efaultActionInvocation.java:246)美元,com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141 B $ B)
在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com .opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
在com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
在com.opensymphony.xwork2 .DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
在com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)在com.opensymphony.xwork2.DefaultActionInvocation.invoke
(DefaultActionInvocation .java:246)
在org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2 .interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept (ExceptionMappingInterceptor.java:189)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54 )
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilt erChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 316)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina .connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
at com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)
at com.sun .enterprise.v3.services.impl.Cont ainerMapper.service(ContainerMapper.java:167)
位于org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
位于org.glassfish.grizzly.http.server。 HttpHandler.doHandle(HttpHandler.java:175)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9 .execute(ExecutorResolver.java:119)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain .java:201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112 )
在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
在org.glassfish.grizzly.nio。
重度:transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
处org.glassfish org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
。 grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)
at org.glassfish.grizzly.strategies .WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
at org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565)
at org.glassfish.grizzly.threadpool .AbstractThreadPool $ Worker.run(AbstractThreadPool.java:545)$ b $在java.lang.Thread.run(Thread.java:745)
引起:com.microsoft.sqlserver.jdbc.SQLServerException:不能将值NULL插入'Pass'列中,表'DB_H2H.Masters.tbl_Users';列不允许有空值。更新失败。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388)
在com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement $ PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338)
。在COM .microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at com.microsoft.sqlserver .jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement .executeUpdate(SQLServerPreparedStatement.java:306)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)

我是struts和hibernate的新手..所以我请求你所有的帮助。如果需要,我可以提供更多信息。我尝试了大多数在SO中给出的解决方案,但没有一个能够帮助解决问题。


<解决方案

错误很明显,密码(旧的或新的)未在您的操作POJO中设置。所以你得到了一个 NULL ,它看起来不能被插入到你的数据库中(对于你的数据库列没有空限制)。



密码标记的名称与您的POJO的名称不匹配,这允许参数拦截器和模型驱动的拦截器填充您的POJO。 (否则,struts可能会将哪个字段放在哪个属性中)



因此,将您的标签更改为(对其他标签也一样):

 < s:密码名称=oldpwdlabel =旧密码/> 
< s:密码名称=newpwdlabel =新密码/>

请参阅:

https://struts.apache.org/docs/parameters-interceptor.html



https:// struts。 apache.org/docs/model-driven.html

另请参阅 ModelDriven接口在struts2中构成安全性explot吗?


So this is the case.. I am creating a web application using struts2 and hibernate. I am creating a change password page by which a user can change his password. But I am getting error as "org.hibernate.exception.ConstraintViolationException: could not execute statement".. Below is my code and stack trace.

//JSP

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>H2H: Change Password</title>
    </head>
    <body>
            <s:form action="changep">               
            <s:textfield name="empid" label="Emp ID" />
            <s:textfield name="uname" label="Username"/>
            <s:password name="opwd" label="Old Password"/>
            <s:password name="npwd" label="New Password"/>
            <s:password name="cpwd" label="Confirm Password"/>
            <s:submit name="Change Password" align="center"/>
        </s:form>
    </body>
</html>

//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.connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <property name="hibernate.connection.url">jdbc:sqlserver://192.168.100.25:1433;databaseName=db_h2h</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password">123</property>
    <property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
    <property name="hibernate.show_sql">true</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <mapping resource="hibernate.hbm.xml" class="example.Login"/>
    <mapping resource="pass.hbm.xml" class="example.Pass"/>    
  </session-factory>
</hibernate-configuration>

//pass.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class dynamic-insert="false" dynamic-update="false" mutable="true" 
           name="example.Pass" optimistic-lock="version" polymorphism="implicit" 
           select-before-update="false" table="masters.tbl_users">
        <id name="empid" type="int">
            <column name="empid" />
            <generator class="assigned" />
        </id>
        <property name="empname" type="java.lang.String">
            <column name="empname" />
        </property>                     
        <property name="newpwd" type="java.lang.String">
            <column name="pass" />
        </property>
    </class>
</hibernate-mapping>

//struts.xml

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="subin" namespace="" extends="struts-default">

        <action name="login" class="example.ShowLoginAction">
            <result name="success">/index.jsp</result>
        </action>

        <action name="pass" class="example.ShowPassAction">
            <result name="success">/changepass.jsp</result>
        </action>

        <action name="dashboard" class="example.ShowDashboardAction">
            <result name="success">/dashboard.jsp</result>
        </action>

        <action name="verify" class="example.LoginAction">
            <result name="success">/dash.jsp</result>
            <result name="fail">/fail.jsp</result>
        </action>

        <action name="changep" class="example.PassAction">
            <result name="success">/dash.jsp</result>
            <result name="fail">/fail.jsp</result>
            <result name="input">/fail.jsp</result>
        </action>
    </package>

</struts>

//POJO class(Pass.java)

package example;

public class Pass {
    private int empid;
    private String empname;
    private String oldpwd;
    private String newpwd;
    private String cnfpwd;

    public int getEmpid() {
        return empid;
    }

    public void setEmpid(int empid) {
        this.empid = empid;
    }

    public String getEmpname() {
        return empname;
    }

    public void setEmpname(String empname) {
        this.empname = empname;
    }

    public String getOldpwd() {
        return oldpwd;
    }

    public void setOldpwd(String oldpwd) {
        this.oldpwd = oldpwd;
    }

    public String getNewpwd() {
        return newpwd;
    }

    public void setNewpwd(String newpwd) {
        this.newpwd = newpwd;
    }

    public String getCnfpwd() {
        return cnfpwd;
    }

    public void setCnfpwd(String cnfpwd) {
        this.cnfpwd = cnfpwd;
    }

}

//ActionSupport Class(PassAction.java)

package example;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;


public class PassAction extends ActionSupport implements ModelDriven<Pass> {

    Pass pass = new Pass();

    public PassAction() {
    }

    public String execute() throws Exception {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction t = session.beginTransaction();
        System.out.println("transx " + t);

        String hql = "UPDATE Pass set newpwd = :password WHERE empid= :id";
        Query query = session.createQuery(hql);        
        query.setParameter("password", pass.getNewpwd());
        query.setParameter("id", pass.getEmpid());
        int res=query.executeUpdate();

        System.out.println("Rows Updated: "+res);

        query.setMaxResults(1);
        t.commit();




        Pass p = (Pass) query.uniqueResult();
        if (p == null) {
            return "fail";
        }
        return "success";

    }

    public Pass getModel() {
        return pass;
    }

}

//ShowPassAction.java

package example;

import com.opensymphony.xwork2.ActionSupport;

public class ShowPassAction extends ActionSupport {

    public ShowPassAction() {
    }

    public String execute() throws Exception {
        return "success";
    }

}

//Stack trace

ERROR:   Cannot insert the value NULL into column 'Pass', table 'DB_H2H.Masters.tbl_Users'; column does not allow nulls. UPDATE fails.
Severe:   187355 [http-listener-1(5)] ERROR org.apache.struts2.dispatcher.Dispatcher - Exception occurred during processing request: could not execute statement
Severe:   org.hibernate.exception.ConstraintViolationException: could not execute statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:109)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:78)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:445)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:347)
    at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1282)
    at org.hibernate.internal.QueryImpl.executeUpdate(QueryImpl.java:118)
    at example.PassAction.execute(PassAction.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:450)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:289)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:239)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:161)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:563)
    at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:434)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.
Severe:   transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Cannot insert the value NULL into column 'Pass', table 'DB_H2H.Masters.tbl_Users'; column does not allow nulls. UPDATE fails.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:196)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1454)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:388)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:338)
    at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
    at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:185)
    at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:160)
    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:306)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)

I am a newbie to struts and hibernate.. So I request all your help.. I can give more information if needed.. I tried most of the solutions given in SO but none of them helped

解决方案

The error is clear, the password (old or new) is not set in your action POJO. So you are getting a NULL which seems can not be inserted to you DB (for a not null constrain on you DB column).

The name of password tags does not match the name of your POJO, this allow the parameter interceptor and model driven interceptor fill your POJO. (Otherwise how struts could guss which field must be put in which property)

So change your tags as (do it for other tags too):

 <s:password name="oldpwd" label="Old Password"/>
 <s:password name="newpwd" label="New Password"/>

Please refer to:

https://struts.apache.org/docs/parameters-interceptor.html

https://struts.apache.org/docs/model-driven.html

Also please refer to Does the ModelDriven interface poses a security explot in struts2?

这篇关于org.hibernate.exception.ConstraintViolationException:无法执行语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆