求助:Message attempt to create saveOrUpdate event with null entity

篱归 2018-01-13 01:55:04
出现错误

Type Exception Report

Message attempt to create saveOrUpdate event with null entity

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:45)
org.hibernate.event.spi.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:28)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:671)
org.hibernate.internal.SessionImpl.save(SessionImpl.java:666)
edu.gdut.shoppingmall.dao.impl.ReaderDAO.create(ReaderDAO.java:27)
edu.gdut.shoppingmall.business.ebo.ReaderEBO.create(ReaderEBO.java:19)
edu.gdut.shoppingmall.actions.ReaderAction.add(ReaderAction.java:41)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:497)
ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:899)
ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1544)
ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68)
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:98)
com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:90)
ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1620)
ognl.ASTMethod.getValueBody(ASTMethod.java:91)
ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
ognl.SimpleNode.getValue(SimpleNode.java:258)
ognl.Ognl.getValue(Ognl.java:470)
ognl.Ognl.getValue(Ognl.java:434)
com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:374)
com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:426)
com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:372)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:438)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:293)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:250)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:179)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:201)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:67)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:133)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:85)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:101)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:142)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:160)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:175)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:121)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:167)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:203)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:196)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:48)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:574)
org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:79)
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:141)

Note The full stack trace of the root cause is available in the server logs.

我找了好久找不出什么错误。以下是我的代码,求大哥帮帮忙,看一下是哪里错了。

...全文
950 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
篱归 2018-01-17
  • 打赏
  • 举报
回复
网上的方法一个个试了,都不是,而是action里面的get 和set方法写错了。改成下面这样就可以了

public ApplicationModel getAm() {
		return am;
	}

	public void setAm(ApplicationModel am) {
		this.am = am;
	}
setGm我在其他action里面用了,不知道是不是因为这样就错了,反正改了之后就可以了。
孟子E章 2018-01-13
  • 打赏
  • 举报
回复
EBOFactory.getReaderEBO().create(rm); rm为null了,你可以断点调试下
篱归 2018-01-13
  • 打赏
  • 举报
回复

<struts>
		<package name="BookManage" namespace="/" extends="struts-default">
		<!-- 对书本的操作 -->
			<action name="book_*" class="edu.gdut.shoppingmall.actions.GoodsAction" method="{1}">
				<result name="success">/list.jsp</result>
				<result name="toUpdate">/bookUpdate.jsp</result>
				<!-- 后台登陆成功 --><result name="successLogin">/home.jsp</result>
				<!-- 后台登陆失败 --><result name="failLogin">/login.jsp</result>
				<allowed-methods>regex:.*</allowed-methods>
			</action>
			<!-- 删除修改 -->
			<action name="br_*" class="edu.gdut.shoppingmall.actions.GoodsAction" method="{1}">
				<result name="success">/BARlist.jsp</result>
				<result name="toUpdate">/bookUpdate.jsp</result>		
				<allowed-methods>regex:.*</allowed-methods>
			</action>
			<!-- 对读者的操作 -->
			<action name="reader_*" class="edu.gdut.shoppingmall.actions.ReaderAction" method="{1}">
				<result name="success">/readerList.jsp</result>
				<result name="toUpdate">/readerUpdate.jsp</result>
				<allowed-methods>regex:.*</allowed-methods>
			</action>
			<!-- 对申请表的操作 -->
			<action name="application_*" class="edu.gdut.shoppingmall.actions.APLAction" method="{1}">
				<result name="success">/RcommendList.jsp</result>	
				<allowed-methods>regex:.*</allowed-methods>
			</action>
			<!-- 对借阅归还的操作 -->
			<action name="borrow_*" class="edu.gdut.shoppingmall.actions.BARAction" method="{1}">
				<result name="success">/borrowList.jsp</result>	
				<allowed-methods>regex:.*</allowed-methods>
			</action>
		</package>
	</struts>
页面readerAdd.jsp

<%@page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>增加读者</title>
</head>
<body>
<body background="简单.jpg" >
<center><font color="#8080C0" size="20px">增加读者</font></center>
	<form action="${pageContext.request.contextPath}/reader_add"" method="post">
	<input type="hidden" name="submitFlag" value="add">
			<table width="20%" align="center">
				<td align="right"><font color="#8080C0">身份证号</font></td>
					<td><input type="text" name="rm.id"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">借阅卡号</font></td>
					<td><input type="text" name="rm.bno"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">姓名</font></td>
					<td><input type="text" name="rm.rname"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">性别</font></td>
					<td><input type="text" name="rm.sex"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">联系方式</font></td>
					<td><input type="text" name="rm.phone"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">籍贯</font></td>
					<td><input type="text" name="rm.concord"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">单位</font></td>
					<td><input type="text" name="rm.workunit"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">职称</font></td>
					<td><input type="text" name="rm.jtitle"></input></td>
				</tr>
				<tr>
					<td align="right"><font color="#8080C0">邮政编码</font></td>
					<td><input type="text" name="rm.postalcode"></input></td>
				</tr>
				<tr>
					<td colspan="2" align="center"><input type="submit" value="保存˜"></input>
					<input type="reset" value="重置"></input>

					</td>
				</tr>
			</table>
		</input>
	</form>
</body>
</html>
页面readerList.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
   <%@taglib uri="/gdut.edu.cn" prefix="gdut"%>
	
				<!DOCTYPE HTML>
				<html>
				<head>
				<meta charset='utf-8'>
				<style>
					  a{font-size:25px;}
				</style>
				</head>
				<body background=简单.jpg>	
				<center> <font size="20px" color="ff9224">读者信息</font></center>
<jsp:useBean id="pb" class="edu.gdut.shoppingmall.common.mytaglib.PageBean" scope="session"/>
<jsp:setProperty property="currPage" name="pb"/> 
				<table align='center' width='40%'>
				<tr>
				   <td>身份证号</td>
				   <td>借阅卡号</td>
				   <td>姓名</td>
				   <td>性别</td>
				   <td>联系方式</td>
				   <td>籍贯</td>
				   <td>单位</td>
				   <td>职称</td>
				   <td>邮政编码</td>
				</tr>
				 <gdut:page var="rm" list="${result}" pb="${pb}">	
					<tr>
					<td>${rm.id}</td>
					<td>${rm.bno}</td>
					<td>${rm.rname}</td>
					<td>${rm.sex}</td>
					<td>${rm.phone}</td>
					<td>${rm.concord}</td>
					<td>${rm.workunit}</td>
					<td>${rm.jtitle}</td>
					<td>${rm.postalcode}</td>
                    <td>
			<a href="${pageContext.request.contextPath}/reader_delete?rm.id=${rm.id}">删除</a>
			  
			<a href="${pageContext.request.contextPath}/reader_toUpdate?rm.id=${rm.id}">修改</a>
		 </td>        
					</tr>
				</gdut:page> 
				</table>
				</body>
				</html>	
求帮忙看下可以吗?找了好久不知道哪里错了
篱归 2018-01-13
  • 打赏
  • 举报
回复
我的代码如下

public  class ReaderDAO implements RIBaseDAO{

	@Override//增加
	public boolean create(ReaderModel rm) {
		Session session=HbnUtil.getSession();//
		session.beginTransaction();
		session.save(rm);//
		session.getTransaction().commit();//
		session.close();
		return true;
	}

	@Override//删除
	public boolean delete(String id) {
		Session session=HbnUtil.getSession();//
		ReaderModel rm=session.load(ReaderModel.class, id);
		session.beginTransaction();
		session.delete(rm);//
		session.getTransaction().commit();//
		session.close();
		return true;
	}

	

	@Override
	public ReaderModel findByNum(String id) {
		Session session=HbnUtil.getSession();//
		ReaderModel gm=session.load(ReaderModel.class, id);
		session.beginTransaction();
		session.getTransaction().commit();//
		session.close();
		return gm;
	}

	@Override
	public boolean update(ReaderModel rm) {
		Session session=HbnUtil.getSession();//
		session.beginTransaction();
		session.update(rm);//
		session.getTransaction().commit();//
		session.close();
		return true;
	}
	
	@Override
	public List<ReaderModel> findAll() {
		String hql="from GoodsModel";//
		Session session=HbnUtil.getSession();//
		session.beginTransaction();
		List<ReaderModel>list=session.createQuery(hql).list();
		session.getTransaction().commit();//
		session.close();
		return list;
	}
	@Override//
	public List<ReaderModel> findByCondition(Map<String, String> condition) {
		Session session=HbnUtil.getSession();//
		session.beginTransaction();
		Criteria criteria=session.createCriteria(ReaderModel.class);
		Iterator<Entry<String,String>>iter=condition.entrySet().iterator();
		while(iter.hasNext()){
			Map.Entry<String, String>entry=iter.next();
			String key=entry.getKey();
			String value=entry.getValue();
			if("id".equals(key)){
				criteria.add(Restrictions.like("num", value, MatchMode.ANYWHERE));//模糊匹配
			}
			if("bno".equals(key)){
				criteria.add(Restrictions.like("bno", value, MatchMode.ANYWHERE));
			}
			if("rname".equals(key)){
				criteria.add(Restrictions.like("rname", value, MatchMode.ANYWHERE));
			}
			if("sex".equals(key)){
				criteria.add(Restrictions.like("sex", value, MatchMode.ANYWHERE));
			}
			if("phone".equals(key)){
				criteria.add(Restrictions.like("phone", value, MatchMode.ANYWHERE));
			}
			if("concord".equals(key)){
				criteria.add(Restrictions.like("concord", value, MatchMode.ANYWHERE));
			}
			if("workunit".equals(key)){
				criteria.add(Restrictions.like("workunit", value, MatchMode.ANYWHERE));
			}
			if("jtitle".equals(key)){
				criteria.add(Restrictions.like("jtitle", value, MatchMode.ANYWHERE));
			}
			if("postalcode".equals(key)){
				criteria.add(Restrictions.like("bno", value, MatchMode.ANYWHERE));
			}
			
			
		}
		List<ReaderModel> list=criteria.list();
		session.getTransaction().commit();
		session.close();
		return list;
	}

	
}



public interface RIBaseDAO {
	//读者
	boolean create(ReaderModel rm);
	boolean delete (String id);
	List<ReaderModel> findAll();	
	ReaderModel findByNum(String id);
	boolean update(ReaderModel rm);
	List<ReaderModel> findByCondition(Map<String,String>condition);
		
	
}

public class ReaderEBO implements ReaderEBI{

	@Override
	public boolean create(ReaderModel rm) {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		return bdao.create(rm);	
	}

	@Override
	public boolean delete(String id) {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		return bdao.delete(id);
	}
	public boolean update(ReaderModel rm) {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		return bdao.update(rm);		
	}

	public List<ReaderModel> findAll() {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		List<ReaderModel> list=bdao.findAll();
		return list;
	}

	public ReaderModel findByNum(String id) {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		ReaderModel rm=bdao.findByNum(id);
		return rm;
	}
	@Override
	public List<ReaderModel> findByCondition(Map<String, String> condition) {
		RIBaseDAO bdao=DAOfactory.getReaderDAO();
		List<ReaderModel> list=bdao.findByCondition(condition);
		return list;
	}

	@Override
	public void sortByNum() {
		// TODO Auto-generated method stub
		
	}
	

}


public interface ReaderEBI {
	boolean create(ReaderModel rm);
	boolean delete(String num);
	boolean update(ReaderModel rm);
	
	List<ReaderModel> findAll();
	List<ReaderModel> findByCondition(Map<String,String>condition);
	ReaderModel findByNum(String num);
	void sortByNum();
}


public class ReaderAction extends ActionSupport{

	public ReaderModel rm;
	
	public ReaderModel getGm() {
		return rm;
	}
	public void setGm(ReaderModel rm) {
		this.rm = rm;
	}
	
	
	public String display(){
		List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
		this.pageHandler(list);
		return "success";
	}

	public String add(){
		EBOFactory.getReaderEBO().create(rm);
		List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
		this.pageHandler(list);
		return "success";
	}
	
	public String Rdelete(){
		EBOFactory.getReaderEBO().delete(rm.getId());
		List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
		this.pageHandler(list);
		return "success";
	}
	
	
	public String Rupdate(){
		EBOFactory.getReaderEBO().update(rm);
		List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
		this.pageHandler(list);
		return "success";
	}

	public String toUpdate(){
		ReaderModel ReaderModel=EBOFactory.getReaderEBO().findByNum(rm.getId());
		ActionContext context=ActionContext.getContext();
		context.getSession().put("ReaderModel", ReaderModel);
		return "toUpdate";
	}
	
	public String findAll(){
		List<ReaderModel>list=EBOFactory.getReaderEBO().findAll();
		this.pageHandler(list);
		return "success";
		
	}

		public String findByNum(String id){
			ReaderModel rm = EBOFactory.getReaderEBO().findByNum(id);
			ActionContext context=ActionContext.getContext();
			context.getSession().put("rm", rm);//锟斤拷锟絞m,锟斤拷gm锟斤拷锟斤拷list锟斤拷
			return "success";
			
		}
	
		public String RfindByCondition() {
			HttpServletRequest req=ServletActionContext.getRequest();
			Map<String,String> condition = new HashMap<String,String>();
			Enumeration<String> paramNames = req.getParameterNames();
			while(paramNames.hasMoreElements()) {
				String key = paramNames.nextElement();
				String value = req.getParameter(key);
				if(value!=null&&value.trim().length()!=0) {
					condition.put(key, value);
				}
			}
			List<ReaderModel> list=EBOFactory.getReaderEBO().findByCondition(condition);
			this.pageHandler(list);
			return "success";
		}
			
		private void pageHandler(List<ReaderModel> list){
			if(list==null){
				list=new ArrayList<ReaderModel>();
			}
			PageBean<ReaderModel> pb=new PageBean<ReaderModel>();
			pb.setPageSize(5);
			pb.setCurrPage(0);
			pb.setTotalPage(list.size()/pb.getPageSize()+1);
			 if(pb.getPageSize()>=list.size()) {
					pb.setPageList(list);//小于5不分页
				}else {
					pb.setPageList(list.subList(0, 1*pb.getPageSize()-1));//大于5,分页
				}
			
			ActionContext context=ActionContext.getContext();
			context.getSession().put("pb", pb);
			context.getSession().put("result", list);
		}		
	
}

2,099

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧