hibernate 插入数据时报 could not insert 高手进

every888 2008-12-18 04:53:43
我在操作一个含有外键的表时插入数据竟然抛出如下错误,望高手指教!不甚感激
org.springframework.dao.DataIntegrityViolationException: could not insert: [com.mwgj.wmw.spring.Wmwusertable]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.mwgj.wmw.spring.Wmwusertable]
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [com.mwgj.wmw.spring.Wmwusertable]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:1986)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2405)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:37)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:269)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at org.springframework.orm.hibernate3.HibernateTemplate$12.doInHibernate(HibernateTemplate.java:635)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:632)
at com.mwgj.wmw.spring.WmwusertableDAO.save(WmwusertableDAO.java:51)
at com.mwgj.wmw.data.DBSource.SavaUser(DBSource.java:49)
at com.mwgj.wmw.struts.action.RegisterAction.execute(RegisterAction.java:79)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.mwgj.wmw.filter.RequestFilter.doFilter(RequestFilter.java:109)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
at java.lang.Thread.run(Unknown Source)
...全文
3785 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zheng2011 2011-08-31
  • 打赏
  • 举报
回复
终于解决了!
同志 ,是获取的值不对,牛头不对马嘴!a,b通过id关联
a(id,name),b(id,desc,a_id)
你将获取的name的值赋给了id,将id的值赋给了name,(造成了两个表关联字段数据不一致)所以两张表就违反了外键约束!
90worker 2011-04-20
  • 打赏
  • 举报
回复
希望有人能解决呀,好急呀
  • 打赏
  • 举报
回复
dsfsdafffffffffffffffffffff
wenyonghua 2009-12-07
  • 打赏
  • 举报
回复
我也是出现了这个问题
every888 2008-12-19
  • 打赏
  • 举报
回复
怎么弄哦
不会撒
alvin__Gao 2008-12-19
  • 打赏
  • 举报
回复
可以设置下外键的级联操作 在insert 时 不进行级联阿!
RXPY2007 2008-12-19
  • 打赏
  • 举报
回复
从细节做起,检查下插入时每个字段类型是否对应?是否有长度限制?要插入的字段是否和数据库表中字段一一对应?是否重复?
WoMaJia 2008-12-19
  • 打赏
  • 举报
回复
up
every888 2008-12-19
  • 打赏
  • 举报
回复
外键肯定不能为空呀
再者
我的外键对象都是从数据库里查询出来的,调试时数据也是正常的,但是就是在插入的时候报错
很郁闷
every888 2008-12-19
  • 打赏
  • 举报
回复
怎么操作呀?
zou_wei_forever 2008-12-19
  • 打赏
  • 举报
回复
你的外键字段可能设置了not-null="true" ,hibernate在插入的时候,由于此时外键对应的属性为空,即该属性还没有被持久化,导致hibernate插入失败,你可以将not-null设置为false,或者将属性持久化以后,再持久化属性所对应的对象。
every888 2008-12-19
  • 打赏
  • 举报
回复
        <many-to-one name="wmwheadimgtable" class="com.mwgj.wmw.spring.Wmwheadimgtable" fetch="select">
<column name="wmw_uheadportrait">
<comment>头像</comment>
</column>
</many-to-one>
<many-to-one name="wmwpopedomtable" class="com.mwgj.wmw.spring.Wmwpopedomtable" fetch="select">
<column name="wmw_upopedom" not-null="true">
<comment>权限</comment>
</column>
</many-to-one>


 <set name="wmwusertables" inverse="true">
<key>
<column name="wmw_uheadportrait">
<comment>头像</comment>
</column>
</key>
<one-to-many class="com.mwgj.wmw.spring.Wmwusertable" />
</set>


       <set name="wmwusertables" inverse="true">
<key>
<column name="wmw_upopedom" not-null="true">
<comment>权限</comment>
</column>
</key>
<one-to-many class="com.mwgj.wmw.spring.Wmwusertable" />
</set>



hibernate+spring自动映射的,没做任何修改
lvkai0452 2008-12-19
  • 打赏
  • 举报
回复
把你的配置文件贴出来看看啊,关系你咋配置的
every888 2008-12-19
  • 打赏
  • 举报
回复
wmw_pcode varchar(255) not null comment '权限code',

wmw_hcode varchar(255) not null comment '图片code',

wmw_uheadportrait varchar(255) comment '头像',
wmw_upopedom varchar(255) not null comment '权限',
constraint FK_wmw_upopedom_pcode foreign key (wmw_upopedom) references wmwPopedomTable(wmw_pcode), #建立权限关联
constraint FK_wmw_uheadportrait_hcode foreign key(wmw_uheadportrait) references wmwHeadImgTable(wmw_hcode) #建立头像关联

长度是肯定不会超的,主外键也应该没有错
还有其它的解决方式没
zou_wei_forever 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 every888 的回复:]
外键肯定不能为空呀
再者
我的外键对象都是从数据库里查询出来的,调试时数据也是正常的,但是就是在插入的时候报错
很郁闷
[/Quote]
将cascade设置为none试试
seaman_ 2008-12-18
  • 打赏
  • 举报
回复

是约束的问题,
除了外间约束,还可能违反了长度约束
看看是否还有字段超过了长度的约束
phoenixLotus 2008-12-18
  • 打赏
  • 举报
回复
2楼和6楼的提出了你问题 你可以试哈!
every888 2008-12-18
  • 打赏
  • 举报
回复
Wmwheadimgtable对应的id的记录是在表中已经存在的呀
我在表单中选择了Wmwheadimgtable对应的name 然后调用方法查询出Wmwheadimgtable对象
上面的方法也可以看出来
lanzhengwu 2008-12-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 every888 的回复:]
我插入数据时是先在外键表里查询出数据了再插入的呀
[/Quote]
不是先查询能解决的..看2楼..
假如Wmwusertable 和B表通过ID外键对应的话...
你现在要插入Wmwusertable 数据.
先得在B中插入对应ID的记录..
思無芷盡 2008-12-18
  • 打赏
  • 举报
回复
你插入的时候 给外键关联做处理了吗?
就是保存外键关联表对应的实体bean的非空对象一同保存,
比如
你要插入的表a,表a外键关联表b,关联属性字段为 b_id
一般hibernate外键关联不是这样吗?b_id指的是表b对应的实体bean vo的对象,
所以你要保存表a的时候的把表b的非空属性赋值的表b对象,赋值给b_id。
一般就是通过查询关联表来获取表b bean对象set给表a,然后一块保存。
加载更多回复(4)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧