我用hibernate+Struts2做了个网上书店,在修改图书信息时出现下列错误,求高手指点...
javax.servlet.ServletException: org.hibernate.PropertyValueException: not-null property references a null or transient value: org.model.Bookinfo.date
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
有时出现的是下面这个:
javax.servlet.ServletException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
dao代码如下:
package org.dao.impl;import java.util.Date;
import java.util.List;import org.dao.IBookDao;
import org.model.Bookinfo;
import org.web.paging.PageInfo;public class BookDaoImpl extends BaseDaoImpl implements IBookDao{

public List<Bookinfo> getBookListByName(String name, PageInfo pageInfo){
String hql ="";
if("".equals(name) || null==name){
hql = "from Bookinfo" ;
}else{
hql = "from Bookinfo where bookName like '%"+name+"%'";
}
return this.getPage(hql, pageInfo);
}

public Bookinfo getLastBook(){
List<Bookinfo> list = super.search("from Bookinfo where remaining>0 order by id desc");
if(list!=null&&list.size()>0){
return list.get(0);
}
return null;
}

public Bookinfo getByID(Integer bookid){
return (Bookinfo)super.getObject(Bookinfo.class, bookid);
}

public void save(Bookinfo book){
//新增记录时id为空
if (null==book.getId()){
Bookinfo lastBook = getLastBook();
//bookID加1
book.setId(lastBook.getId()+1);
}
if (null==book.getDate()){
book.setDate(new Date(System.currentTimeMillis()));
}
super.saveObject(book);
}

public void update(Bookinfo book){
super.renew(book);
}

public void delete(Integer bookid){
super.delete(Bookinfo.class, bookid);
}
}

解决方案 »

  1.   

    not-null property references a null or transient value: org.model.Bookinfo.date
    这个错误很明显啊,
    不能为空的属性引用了一个null的值,也就是org.model.Bookinfo.date不能为空,你看下你那个*-Bookinfo.cfg.xml里面的date的配置喽..
      

  2.   

    javax.servlet.ServletException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:两个对象用了同一个id值,可能你做的时候,id不是由系统生成而是自己生成的,但是自己生成的却没有保证唯一。