项目会不定期的出现这个问题。数据库是mysql的。而且id是自增,也不是null的。而且是在查询的时候出现的。
异常信息:
- Java code
org.hibernate.AssertionFailure: null id in com.alpha.bean.AnswerInfo entry (don't flush the Session after an exception occurs)
xml配置:
- XML code
<id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="native"></generator> </id> <property name="qid" type="java.lang.Integer"> <column name="qId" /> </property> <property name="content" type="java.lang.String"> <column name="content" length="5000" /> </property> <property name="adate" type="java.util.Date"> <column name="aDate" length="19" /> </property> <property name="aid" type="java.lang.Integer"> <column name="aId" /> </property> <property name="ip" type="java.lang.String"> <column name="ip" length="20" /> </property> <property name="status" type="java.lang.Integer"> <column name="status" /> </property> <property name="remark1" type="java.lang.String"> <column name="remark1" length="200" /> </property> <property name="remark2" type="java.lang.String"> <column name="remark2" length="200" /> </property> <property name="remark3" type="java.lang.String"> <column name="remark3" length="200" /> </property> <property name="remark4" type="java.lang.String"> <column name="remark4" length="200" /> </property>
sql :
- SQL code
CREATE TABLE `voteResuleInfo` ( `id` int(11) unsigned zerofill NOT NULL auto_increment, `voteQuestionId` int(11) default NULL, `voteSelectId` int(11) default NULL, `ip` varchar(20) default NULL, `voteDate` datetime default NULL, `remark` varchar(200) default NULL, `remark2` varchar(200) default NULL, `remark3` varchar(200) default NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
------解决方案--------------------
你加个断点跟着看看,看看session
------解决方案--------------------
楼主手动插入一条数据到数据库 看看是否自增
难道主键重复?
------解决方案--------------------
既然是flush,这问题感觉应该是无法成功将内存或者说session中的数据同步至数据库中
表象就是entry中的id为null,原因有很多,查到两个比如:
http://blog.163.com/woshihezhonghua@126/blog/static/12714363620091148170437/
http://java.999it.net/?viewnews-115
p.s. don't flush the Session after an exception occurs
这个提示感觉挺无奈的,异常发生和flush session对用户来说应该是在一个原子操作里的吧
------解决方案--------------------
想问下你的添加数据的方法是自己写的,还是继承了HibernateDaoSupport?
<id name="id" type="java.lang.Integer">