我有几个关于JPA最佳实践的小问题(通过hibernate)。
我的第一个问题是关于一个域模型的复杂性。 我有一个代表...账户的模型账户;) 帐户与其他对象有很多关系。其中很多都需要被Account对象知道,但其中一些只需要知道其他部分。
例如,我有一个Message模型,它代表发送到帐户的消息。 我真的不想用新关系覆盖我的Account模型,因为它已经有很多关系,所以我决定将Account和Model之间的关系单向化。
所以,我只在Message类中映射了与ManyToOne关系的关系,而不是在Account中。
您是否认为在模型类中避免过多关系(在我的案例中为Account)是一种好习惯?或者您认为我必须将所有关系映射到我的帐户类中的帐户。那么,什么是最佳实践,单向或双向关系?
我的第二个问题来自单向案例。当我删除帐户时,由于单向关系,现在无法加载引用此帐户的所有邮件,因为缺少父帐户。
维护未损坏的数据库的最佳做法是什么? - 删除帐户时删除所有关系(在性能方面可能非常危险) - 在此过程中创建一个逐步删除所有关系并停用帐户的作业
感谢您提出的所有建议;)
答案 0 :(得分:2)
如果您不需要从帐户导航到其消息(在代码或查询中),您可以毫无问题地使用单向关系。
无论您选择何种解决方案,都应在邮件及其帐户之间定义外键约束。这样,删除帐户而不先删除其消息将引发异常。这就是您保证数据一致性不被破坏的方式。如果您希望能够删除帐户而不删除其邮件,则应首先通过将帐户ManyToOne字段设置为null
来将帐户与其邮件分离。当然,必须将关系标记为可选,并且forein键列必须可以为空。
但请注意,从帐户到其邮件之间存在关系(即使无法从其他代码访问),您也可以