与Hibernate只有双向关系可以吗?

时间:2011-01-14 18:54:19

标签: java hibernate playframework

所以这个问题几乎就在标题中。

让我说我有一些classe:用户,帖子,评论和标签。

  • 用户拥有@OneToMany列表和 @OneToMany List。
  • 发布了 @ManyToOne用户,@ OneToMany List,@ ManyToMany List。
  • 评论有@ManyToOne列表, @ManyToOne用户。
  • Tag有@ManyToMany 列表。

我是Hibernate的新手,但我发现很容易使用Tag对象的属性来获取与该标签相关的所有Post对象,或者找到Post对象的作者或所有Post写的由某个用户。

可以吗?

我在这里谈论更多的表现。我也在使用Play!框架。我不知道这是否会改变。

2 个答案:

答案 0 :(得分:2)

双向关系是可以的。真正的危险在于也有懒惰,因为那样你最终会为每个请求将大量的数据库加载到内存中。

如果您有双向关系,最好创建特定的dao方法,以便只使用hql加载所需的数据。

答案 1 :(得分:2)

我认为其中一些应该是单向的。

例如,在实际场景中,您通常不需要显示“Post所有User”,因为它们应该被过滤或分页,因此您需要运行查询数据库而不是从Post检索User(因为在这些用例中不过滤数据库端的集合可能是一个真正的性能问题,特别是如果该集合很大)。

因此在Post中收集User s毫无意义。 User - CommentTag - Post关系也是如此。