Hibernate表的级联问题

我用单向的多对一关系将两张表级联起来了。查询没问题,可就是删除“一”这边的时候出现报错,删除“多”的时候没错。错误内容:[code="java"]java.sql.SQLException: Cannot delete or update a parent row: a foreign key constraint fails (remis_weson.remis_ele_estate, CONSTRAINT FK231ADE28182E2484 FOREIGN KEY (ESTATE_LATEST_USER_ID) REFERENCES remis_org_user (ID))[/code]我要的效果只是级联查询,不需要级联删除以及更新等等。请问各位高手这个问题咋个解决啊。谢谢
[code="java"] class="info.weson.remis.user.bean.User" cascade="none" fetch="join">[/code]

你的配置是正确的。
错误的是操作,因为在删除“一”的时候你必须保证外键引用的。
即在删除“一”之前必须进行删除“多”的操作,除非删除数据库中的外键。

cascade 有五个选项 分别是: all ,delete ,none,save-update,delete-orphan ;
all : 所有情况下均进行关联操作。
none:所有情况下均不进行关联操作。这是默认值。
save-update:在执行save/update/saveOrUpdate时进行关联操作。
delete:在执行delete时进行关联操作。
delete-orphan: 当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,相当于delete ;

好像没有单独的 查询!

[quote]删除数据库中的外键?请问具体是什么办法?谢谢 [/quote]
说明你对数据库的一些基本概念还没弄清。
外键是用来保证数据完整性的。
因为“一“的数据不存在了,那么对应的多通常都是不应该存在的。
所以,在建立数据库时,通常会建立外键,由数据库来维护数据完整性,强制要求用户要正确的操作数据。

当然,特别情形下,为了操作方便或者查询效率的问题,开发人员在明明有数据关连的结构中并不使用外键。
这是合理且有争议的,建议你不要去掉数据库中关联表的外键,尤其是你对数据库不熟悉的情形,不然带来的后果是很严重的。

你现在的操作中,数据库告诉你是外键关联约束,那么请按照它的提示来,在删除时先删除多的一部分,否则请使用cascade="all",由hibernate来维护关联。

如果你确定是需要删掉“一”的部分,且保留多的部分,那么请删除外键。由于你对数据库不熟,建议与DBA沟通,充分考虑删除后的后果后再由DBA删除。

楼上讲的比较清楚了,呵呵,主要是你这个设置关联关系由many方来维护,删除的时候需要首先删除关联关系。

[code="java"]
Many toBeDelete = (Many) session.load(Many.class,id);
toBeDelete.setLatestUser(null);
session.delete(toBeDelete);
tx.commit();
[/code]