2011-06-03 45 views
2

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

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

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

所以,我只在Message类中映射了与ManyToOne关系的关系,而不是在Account中。

你认为这是一个很好的做法,以避免在模型类(帐户在我的情况)太多关系?或者你认为我必须将所有关系映射到我的帐户类中的帐户。那么,最好的做法是什么,单向或双向关系?

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

维护非损坏数据库的最佳做法是什么? - 删除所有关系时,账号被删除(可在性能方面非常危险) - 使该删除逐步所有关系,并在此过程中

感谢您的所有建议停用账户工作;)

回答

2

如果您不需要从帐户导航到其邮件(在代码或查询中),则可以使用单向关系而不会出现问题。

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

注意,虽然,其从该帐户的消息(即使它不是从代码的其余部分访问)的关系将允许你

  • 利用这个关系里面查询
  • 集级联删除关系,以便在删除帐户之前自动删除所有消息。