gpt4 book ai didi

database - JPA : best practices with unidirectional OneToMany

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:17 24 4
gpt4 key购买 nike

我有几个关于 JPA 最佳实践(通过 hibernate )的小问题。

我的第一个问题是关于一个领域模型的复杂性。我有一个模型帐户,它代表一个...帐户;)一个帐户与其他对象有很多关系。其中很多需要被 Account 对象知道,但其中一些只需要被其他部分知道。

例如,我有一个消息模型,它表示发送到帐户的消息。我真的不想用新关系覆盖我的帐户模型,因为它已经有很多关系,所以我决定使帐户和模型之间的关系成为单向的。

因此,我只在 Message 类而不是 Account 中映射了 ManyToOne 关系。

您认为避免在模型类(在我的例子中是 Account)中有太多关系是一个好习惯吗?或者你认为我必须将所有关系映射到我的帐户类中的帐户。那么,最佳做法是什么,单向关系还是双向关系?

我的第二个问题来自单向情况。当我删除一个帐户时,由于单向关系,所有引用该帐户的消息现在都无法加载,因为父帐户丢失了。

维护数据库未损坏的最佳做法是什么?- 删除帐户时删除所有关系(在性能方面可能非常危险)- 做一个逐步删除所有关系的工作,并在此过程中停用帐户

感谢您的所有建议;)

最佳答案

如果您不需要从一个帐户导航到它的消息(在代码中或在查询中),您可以毫无问题地使用单向关系。

无论您选择哪种解决方案,您都应该在消息及其帐户之间定义一个外键约束。这样,在不先删除其消息的情况下删除帐户将引发异常。这就是您保证数据一致性不被破坏的方式。如果您希望能够在不删除其消息的情况下删除一个帐户,那么您应该首先将该帐户与其消息分离,方法是将其帐户 ManyToOne 字段设置为 null。当然,关系必须标记为可选,外键列必须可以为空。

但是请注意,从帐户到它的消息之间建立关系(即使它不能从代码的其余部分访问)将允许您

  • 在查询中使用这种关系
  • 在关系上设置级联删除,以便在删除帐户之前自动删除所有消息。

关于database - JPA : best practices with unidirectional OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6226995/

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