我有几个关于jpa最佳实践的小问题(通过hibernate)。
我的第一个问题是关于一个领域模型的复杂性。
我有一个代表…帐户;)
帐户与其他对象有很多关系。其中很多需要由account对象知道,但其中一些只需要为另一部分知道。
例如,我有一个消息模型,它表示发送到帐户的消息。
我不想用一个新的关系覆盖我的帐户模型,因为它已经有很多关系,所以我决定使帐户和模型之间的关系单向。
所以,我只在消息类中映射了一个manytoone关系,而不是在account中。
你认为在模型类中避免过多的关系(在我的例子中是帐户)是一个好的做法吗?或者你认为我必须将所有关系映射到我的帐户类中的帐户。那么,什么是最佳实践,单向或双向关系?
我的第二个问题来自单向案例。当我删除一个帐户时,由于单向关系,引用此帐户的所有邮件现在都无法加载,因为父帐户丢失。
维护未损坏的数据库的最佳实践是什么?
-删除帐户时删除所有关系(在性能方面可能非常危险)
-在此过程中,创建一个逐步删除所有关系并停用帐户的作业
谢谢你的建议;)
最佳答案
如果不需要从帐户导航到其消息(在代码或查询中),则可以毫无问题地使用单向关系。
无论您选择何种解决方案,都应该在消息及其帐户之间定义外键约束。这样,在不首先删除帐户消息的情况下删除帐户将引发异常。这就是如何保证数据一致性不被破坏的方法。如果要删除帐户而不删除其邮件,则应首先将帐户的“帐户管理”字段设置为null
,将帐户与其邮件分离。当然,关系必须标记为可选,forein键列必须为空。
不过,请注意,从帐户到其消息有一个关系(即使代码的其余部分无法访问它),这将允许您
在查询中使用此关系
对关系设置级联删除,以便在删除帐户之前自动删除所有邮件。
关于database - JPA:单向OneToMany的最佳实践,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6226995/