gpt4 book ai didi

java - 如何在 jdo 中不再引用对象时从数据库中删除对象? (n :1 relationship)

转载 作者:行者123 更新时间:2023-11-30 11:56:23 25 4
gpt4 key购买 nike

我有“角色”类和“派系”类。一个角色有一个派系。一个派系可以被多个角色使用。当角色被持久化时,派系也会被持久化。当没有更多字符引用该派系时,我想将其从数据库中删除。

当我有 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.

我只希望在没有更多角色需要时删除该派系。我该怎么做?

最佳答案

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

如果您不能在数据库服务器上执行此操作,那么您可以轻松地在代码中执行与上述相同的操作。将其直接放在数据库中的好处是,无论您的用户和数据之间有多少中间代码层,您都可以在一个地方定义规则,总是执行该规则。

关于java - 如何在 jdo 中不再引用对象时从数据库中删除对象? (n :1 relationship),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4471528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com