解决Hibernate One-to-one 关系 “No row with the given identifier exists:” 错误


在项目中使用Hibernate One-to-one配置了一些表关系。主表为A表,附带了两个One-to-one关系的字表:B表、C表。

在业务上,A表插入和更新的时候会同时更新B表,但是C表使用另外的业务维护。最近在进行级联删除的时候,提示:

No row with the given identifier exists:

出现这个错误的原因是,删除的时候查找C表数据时,没有找到数据。要解决这个问题的关键点是,在级联删除时,如果one-to-one子表不存在数据,则不进行删除。关于这块的信息在Hibernate手册中并未提及,只是有一个constrained字段设置为true|flase的时候会影响删除的顺序。在A表中尝试把C表的one-to-one关系constrained字段设置为false,再次对A表进行级联删除时,C表有对应的数据才会执行删除操作,无数据时不会执行删除操作,问题解决。

有一点疑问是,在Hibernate中many-to-one这样的关系中可以设置not-null属性,为什么one-to-one属性不能也使用这样的属性呢?使用一个constrained这样的字段,怪别扭的。

——看来只能通过阅读源代码才能知道one-to-one的constrained属性究竟做了什么了。

Advertisements

解决Hibernate One-to-one 关系 “No row with the given identifier exists:” 错误》上有1条评论

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s