hibernate遇到的几个问题
今天的问题和解决方案汇总:
1.因为表中有一些字段是有默认值的,那么一定要在映射文件中配置dynamic-insert="true" 。否则,save的时候会报错,因为一些字段没有赋值。配置了动态插入之后,hibernate可以通过有值的属性字段来动态的插入,而不是所有字段都插入。
一定要注意的是:<property>配置的数据库可以插入默认值的字段,一定不能加not-null="true" ,否则动态插入失败!
2. 关于dynamic-update="true" 动态更新,目前用的版本是hibernate3.2,并没有实现这个功能。所以如果用session.update(obj)去更新会报错,因为一些字段不允许为空。也就是生成的SQL语句是更新每一个字段的。解决方案有两个:
a)先用get查询出要修改的对象,在这个对象的基础之上去做update
b)用query方式做update
3. 在做delete的时候,如果用 session.delete(int id)的方式可以成功删除,但如果采用query的方式报错误:java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
上网搜索了一下原因:myEclipse中自带的struts的架包中的antlr-2.7.2这个版本,但hibernate3.2中的版本是antlr-2.7.6,导致冲突。删掉2.7.2这个版本,运行通过。