2010-12-17 28 views
2

我有班级“Character”和班级“Faction”。一个角色有派系。一个派系可以被许多角色使用。当角色被持续时,派系会持续。当我没有更多的字符引用该派别时,我想从数据库中删除它。如何从jdo中不再引用数据库中的对象? (n:1关系)

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

我只想当没有更多的字符需要删除它的派别。我怎样才能做到这一点?

+0

是否可以将“字符”作为“分数”的成员持续存在?你会在“分数”中有一个“角色”列表。所以你可能知道什么时候一个“分数”里面没有更多的“字符”,然后删除它。据我所知,你也可以删除“角色”而没有问题。 – 2012-07-08 12:45:37

回答

1

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

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