2

我有“角色”类和“派系”类。一个角色有一个派系。一个派系可以被许多角色使用。当角色保持不变时,派系就会保持不变。当没有更多角色引用该派系时,我想将其从数据库中删除。

当我有一个 1:1 的关系时,这很容易,因为我可以使用

@Persistent(dependent = "true")

不再需要时将其删除。但这已经不可能了,因为现在可能还有另一个角色仍然需要这个派系。因此,如果我尝试删除 character1 并且他使用与 character2 相同的派系,我会收到以下异常:

java.sql.SQLIntegrityConstraintViolationException: DELETE on table 'FACTION' caused a violation of foreign key constraint 'CHARACTER_FK1' for key (1).  The statement has been rolled back.

我只希望在不再需要该派系时删除该派系。我怎样才能做到这一点?

4

1 回答 1

1

它认为最好的解决方案是数据库本身,而不是 Java。您想在 Character 上放置一个 ON DELETE 触发器,该触发器将获取当前记录(被删除的记录),查找其 Faction,然后检查 Character 表中是否有其他记录引用同一 Faction。如果存在引用该 Faction 的其他记录,则不执行任何操作。如果引用该派系的其他记录不存在,则删除该派系。

如果您不能在数据库服务器上执行此操作,那么您可以轻松地在代码中执行与上面相同的操作。将它直接放在数据库中的好处是,您可以在一个始终强制执行的地方定义规则,而不管您的用户和数据之间有多少中间代码层。

于 2010-12-17T15:02:06.787 回答