日期:2014-05-19  浏览次数:20694 次

100分,急 org.hibernate.AssertionFailure: null id in com.alpha.bean.AnswerInfo ent
项目会不定期的出现这个问题。数据库是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">