2013-05-30 106 views
1

如果我想删除一个实体与休眠我收到消息Removing a detached instance...。我知道那是因为我的交易/会话已关闭。休眠 - 删除对象

目前我该如何做:如果查找对象,我打开一个事务,执行查找,提交,关闭事务。删除也是一样。 什么是删除的正确方法?我是否需要始终保持事务处于打开状态(稍后将删除作为查找执行)。或者我需要再次查找删除?

回答

1

你有2种选择:

会话保持打开更长时间,使加载的对象相同的会话可以将其删除 - 这真的取决于你的应用程序的架构。

可选择在删除调用之前重新加载对象。

1

您还可以创建并执行DELETE查询,并使用WHERE子句传递主键字段的值。在这种情况下,您不必重新连接您的实体。

+0

如果删除“手动”,是否会丢失任何休眠功能?例如。 “级联”注释 - >如果我用查询来做,子女会被删除吗? – jan

+1

级联在这种情况下不起作用,您必须手动控制它。 – eternay

+0

@eternay:级联删除也可以在DDL级别指定。 – Olaf