java - SSH 根據(jù)id字段不能更新數(shù)據(jù)問題
問題描述
org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: com.lcy.po.AuthorAdmin.authorUsername; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: com.lcy.po.AuthorAdmin.authorUsername at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:648) at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411) at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:705) at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:701) at com.lcy.dao.author.admin.AuthorAdminDaoImpl.updateAuthorAdmin(AuthorAdminDaoImpl.java:48) at com.lcy.service.author.admin.AuthorAdminServiceImpl.updateAuthorAdmin(AuthorAdminServiceImpl.java:47) at com.lcy.action.author.admin.AuthorAdminAction.updateAuthorAdmin(AuthorAdminAction.java:124) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 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:248) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619)Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.lcy.po.AuthorAdmin.authorUsername at org.hibernate.engine.Nullability.checkNullability(Nullability.java:95) at org.hibernate.event.def.DefaultFlushEntityEventListener.scheduleUpdate(DefaultFlushEntityEventListener.java:292) at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:151) at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028) at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390) at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:407) ... 71 more
dao的方法
public void updateAuthorAdmin(AuthorAdmin aa) {try { basedao.getTemplate().update(aa); System.out.println('dao updateAuthorAdmin suc');} catch (Exception e) { System.out.println('dao updateAuthorAdmin error'); e.printStackTrace(); throw new RuntimeException();}@Override public AuthorAdmin getAuthorAdmin(Long id) {AuthorAdmin authorAdmin = basedao.getTemplate().get(AuthorAdmin.class,id);if (authorAdmin == null) { System.out.println('dao getAuthorAdmin沒有獲得對(duì)象');}System.out.println('dao getAuthorAdmin成功獲得對(duì)象');return authorAdmin; }
action層
public class AuthorAdminAction extends BaseAction implementsModelDriven<AuthorAdmin>{private AuthorAdmin authoradmin = new AuthorAdmin(); @Override public AuthorAdmin getModel() {return authoradmin; }public String getAuthorAdmin() {authoradmin= iauthoradminservice.getAuthorAdmin(authoradmin.getAuthorId());System.out.println('action getAuthorAdmin suc');return 'getSuccess'; }public String updateAuthorAdmin() {iauthoradminservice.updateAuthorAdmin(authoradmin);System.out.println('action updateAuthorAdmin suc');return 'updateSuccess'; }}
JSP頁面根據(jù)id跳轉(zhuǎn)
<a href='http://www.cgvv.com.cn/wenda/${pageContext.request.contextPath}/get_AuthorAdmin?authorId=<s:property value='#obj.authorId'/>'></a>
進(jìn)入修改表單
<s:form action='update_AuthorAdmin' method='post'><s:hidden name='authorId' value='%{model.authorId}'></s:hidden><s:textfield name='%{model.authorUsername}' label='用戶名'></s:textfield><s:textfield name='%{model.authorPwd}' label='密碼'></s:textfield><s:textfield name='%{model.authorName}' label='姓名'></s:textfield><s:textfield name='%{model.authorSex}' label='性別'></s:textfield><s:textfield name='%{model.authorBirth}' label='生日'></s:textfield><s:textfield name='%{model.authorRegion}' label='作者區(qū)域'></s:textfield><s:textfield name='%{model.authorAddress}' label='通訊地址'></s:textfield><s:textfield name='%{model.authorPost}' label='職稱'></s:textfield><s:textfield name='%{model.authorJob}' label='職業(yè)'></s:textfield><s:textfield name='%{model.authorCompany}' label='工作單位'></s:textfield><s:textfield name='%{model.authorDegree}' label='學(xué)歷'></s:textfield><s:textfield name='%{model.authorMajor}' label='專業(yè)方向'></s:textfield><s:textfield name='%{model.authorTitle}' label='文章標(biāo)題'></s:textfield><s:textfield name='%{model.authorMail}' label='E-mail'></s:textfield><s:textfield name='%{model.authorPhone}' label='電話'></s:textfield><s:textfield name='%{model.authorInfo}' label='個(gè)人簡介'></s:textfield><s:submit value='修改'></s:submit> </s:form>
struct2.xml
<package name='authorAdmin' extends='struts-default'><action name='*_*' method='{1}{2}'> <result name='saveSuccess' type='redirectAction'>list_{2}.action</result> <result name='updateSuccess' type='redirectAction'>list_{2}.action</result> <result name='loginSuccess' type='redirectAction'>list_{2}.action</result> <result name='removeSuccess' type='redirectAction'>list_{2}.action</result> <result name='listSuccess'>/{2}/{1}/{1}Success.jsp</result> <result name='getSuccess'>/{2}/update/update.jsp</result></action> </package>
實(shí)體類的字段還有映射
private Long authorId; private String authorUsername; private String authorPwd; private String authorName; private String authorSex; private String authorBirth; private String authorRegion; private String authorAddress; private String authorPost; private String authorJob; private String authorCompany; private String authorDegree; private String authorMajor; private String authorTitle; private String authorMail; private String authorPhone; private String authorInfo; private Timestamp gmtCreate; private Timestamp gmtModified; private Set documentInfos = new HashSet(0);
<?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'><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name='com.lcy.po.AuthorAdmin' table='author_admin' catalog='ssh'><id name='authorId' type='java.lang.Long'> <column name='author_id' /> <generator /></id><property name='authorUsername' type='java.lang.String'> <column name='author_username' length='20' not-null='true'><comment>用戶名</comment> </column></property><property name='authorPwd' type='java.lang.String'> <column name='author_pwd' length='20' not-null='true'><comment>密碼</comment> </column></property><property name='authorName' type='java.lang.String'> <column name='author_name' length='20'><comment>姓名</comment> </column></property><property name='authorSex' type='java.lang.String'> <column name='author_sex' length='2'><comment>性別</comment> </column></property><property name='authorBirth' type='java.lang.String'> <column name='author_birth' length='20'><comment>生日</comment> </column></property><property name='authorRegion' type='java.lang.String'> <column name='author_region' length='50'><comment>作者區(qū)域</comment> </column></property><property name='authorAddress' type='java.lang.String'> <column name='author_address' length='100'><comment>通訊地址</comment> </column></property><property name='authorPost' type='java.lang.String'> <column name='author_post' length='50'><comment>職稱</comment> </column></property><property name='authorJob' type='java.lang.String'> <column name='author_job' length='50'><comment>職業(yè)</comment> </column></property><property name='authorCompany' type='java.lang.String'> <column name='author_company' length='50'><comment>工作單位</comment> </column></property><property name='authorDegree' type='java.lang.String'> <column name='author_degree' length='40'><comment>學(xué)歷</comment> </column></property><property name='authorMajor' type='java.lang.String'> <column name='author_major' length='50'><comment>專業(yè)方向</comment> </column></property><property name='authorTitle' type='java.lang.String'> <column name='author_title' length='20'><comment>文章標(biāo)題</comment> </column></property><property name='authorMail' type='java.lang.String'> <column name='author_mail' length='100'><comment>E-mail</comment> </column></property><property name='authorPhone' type='java.lang.String'> <column name='author_phone' length='11'><comment>電話</comment> </column></property><property name='authorInfo' type='java.lang.String'> <column name='author_info' length='65535'><comment>個(gè)人簡介</comment> </column></property><property name='gmtCreate' type='java.sql.Timestamp'> <column name='gmt_create' length='19'><comment>創(chuàng)建時(shí)間</comment> </column></property><property name='gmtModified' type='java.sql.Timestamp'> <column name='gmt_modified' length='19'><comment>修改時(shí)間</comment> </column></property><set name='documentInfos' inverse='true'> <key><column name='author_id' not-null='true'> <comment>稿件作者</comment></column> </key> <one-to-many /></set> </class></hibernate-mapping>
問題解答
回答1:先看一下報(bào)錯(cuò),authorUsername是一個(gè)non-null屬性,有一個(gè)非空校驗(yàn),你提交了個(gè)空值,所以報(bào)錯(cuò)了。可能導(dǎo)致的原因:
1.表單無輸入,或輸入錯(cuò)誤2.屬性名稱前后不匹配,傳遞過程中,賦值失敗,造成丟值3.臟數(shù)據(jù),讀取出來的數(shù)據(jù)存在問題,更新插入的時(shí)候空值失敗回答2:
看下basedao的方法吧
相關(guān)文章:
1. javascript - js 有什么優(yōu)雅的辦法實(shí)現(xiàn)在同時(shí)打開的兩個(gè)標(biāo)簽頁間相互通信?2. css3 - Typecho 后臺(tái)部分表單按鈕在 Chrome 下出現(xiàn)靈異動(dòng)畫問題,求解決3. java - 新手做一個(gè)安卓視頻播放器,想實(shí)現(xiàn)一個(gè)進(jìn)度條,按鈕那種在視頻下方懸浮的功能,不知道思路!4. javascript - jquery怎么給select option一個(gè)點(diǎn)擊時(shí)觸發(fā)的事件,如圖 如果選擇自定義觸發(fā)一個(gè)時(shí)間?5. nginx配置server模塊的問題6. java - android代碼重構(gòu):如何把a(bǔ)pp設(shè)置里的頭像UI做成通用的?7. node.js - express請(qǐng)求的具體方法8. javascript - angular和jquery都用到了$符號(hào),一起用會(huì)不會(huì)沖突?9. 想找個(gè)php大神仿個(gè)網(wǎng)站。10. javascript - 怎樣限制同一個(gè)瀏覽器不能登錄兩個(gè)賬號(hào)
