读书人

100分 org.hibernate.AssertionFail

发布时间: 2012-06-07 15:05:14 作者: rapoo

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">


<column name="id" />
<generator class="native"> </generator>
</id>
没用过native本地id 自增
方向生成生成配置文件时,最好是选sequence
<generator class="sequence ">
<param name="sequence">seq_xxx</param>
</generator>
给它单独配个seq



[解决办法]

探讨
想问下你的添加数据的方法是自己写的,还是继承了HibernateDaoSupport?
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
没用过native本地id 自增
方向生成生成配置文件时,最好……

[解决办法]
应该是 hibernate事务 同步的  问题,,

读书人网 >J2EE开发

热点推荐