前段时间,在做一个模拟项目来练习SSH(spring mvc + spring + hibernate)的时候,前台提交数据给后台的时候,后台老是报org.hibernate.AssertionFailure: null id in xxx.xx.xx的异常,我从网上也搜索了很多答案,最终都没有解决我的问题,但是,从网上搜索的结果来看,总结下,其实出现这个问题,并不表示id一定是null,网上有人总结了以下三种情况:
1,null id这个问题时,有可能是字段里用到了数据库的关键字了.(尤其注意这个describe);
2,如果数据库里设置了某个字段值不为null,而你保存的时候就设置了为null,也会报这个异常的;
3,数据库字段与映射文件的字段不一致时。
但是,我经常了很多遍,发现上面3个答案都和我的项目不一样,,后来,我把catch到的异常打印出来看了下,后台居然报密码字段长度不符合要求的问题,想了下,我后台用了hibernate-validator的校验框架,密码长度设置为校验密码不能超过15位,但是,问题出来了,我前台提交的数据,到后台经过MD5摘要算法加密后,就变成了32位的字符串,已经超过15位了,所以在调用hibernate的save()方法保存对象时出错,后来去仔细研究下hibernate-validator,原来这个校验框架,会在save()方法之前再校验一遍各个字段是否符合要求,原先我以为hibernate-validator只是在spring mvc的controller中校验一遍而已,没想到在保存到数据库之前还会再校验一遍。
所以,总结一下,出现null id这个问题,是有多种情况的,需要我们去追踪异常,找出问题所在。