Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与Hibernate只有双向关系可以吗?_Java_Hibernate_Playframework - Fatal编程技术网

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

Java 与Hibernate只有双向关系可以吗?,java,hibernate,playframework,Java,Hibernate,Playframework,所以问题就在标题里 假设我有一些类别:用户、帖子、评论和标签 用户拥有@OneToMany列表和 @单亲名单。 波斯特 @多人同一用户,@OneToMany 列表,@ManyToMany列表。 评论有@manytone列表, @多用户。 标签有@manytomy 列表 我不熟悉Hibernate,但我发现很容易使用标记对象的属性来获取与该标记相关的所有Post对象,或者查找Post对象的作者或某个用户编写的所有Post 可以吗 我说的更多的是性能方面。我也在用这个剧本!框架我不知道这是否会改变什

所以问题就在标题里

假设我有一些类别:用户、帖子、评论和标签

用户拥有@OneToMany列表和 @单亲名单。 波斯特 @多人同一用户,@OneToMany 列表,@ManyToMany列表。 评论有@manytone列表, @多用户。 标签有@manytomy 列表 我不熟悉Hibernate,但我发现很容易使用标记对象的属性来获取与该标记相关的所有Post对象,或者查找Post对象的作者或某个用户编写的所有Post

可以吗


我说的更多的是性能方面。我也在用这个剧本!框架我不知道这是否会改变什么。

拥有双向关系是可以的。真正的危险还在于使用lazy-false,因为这样一来,对于每个请求,您都会将大量数据库加载到内存中


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

有双向关系是可以的。真正的危险还在于使用lazy-false,因为这样一来,对于每个请求,您都会将大量数据库加载到内存中


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

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

例如,在现实场景中,您通常不需要按用户显示所有帖子,因为它们应该被过滤或分页,所以您需要对数据库运行查询,而不是从用户检索帖子,因为在这些用例中,不过滤数据库端的集合可能是一个真正的性能问题,特别是如果收集量很大的话


因此,在用户中收集帖子是没有意义的。用户-评论和标签-帖子关系也是如此。

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

例如,在现实场景中,您通常不需要按用户显示所有帖子,因为它们应该被过滤或分页,所以您需要对数据库运行查询,而不是从用户检索帖子,因为在这些用例中,不过滤数据库端的集合可能是一个真正的性能问题,特别是如果收集量很大的话


因此,在用户中收集帖子是没有意义的。用户-评论和标签-帖子关系也是如此。

谢谢您的回答。你能解释什么是懒惰是错误的吗?哦,我想我明白了。Lazy意味着只有当您想要访问数据时,它才会从数据库中获取数据?当它被关闭时,Hibernate将获得它所需要的所有数据,因此通过双向关系,您将像您所说的那样加载大量内存?假设它是打开的,那么就可以了?你明白了。在我的回答中添加了另一个句子。谢谢你的回答。你能解释什么是懒惰是错误的吗?哦,我想我明白了。Lazy意味着只有当您想要访问数据时,它才会从数据库中获取数据?当它被关闭时,Hibernate将获得它所需要的所有数据,因此通过双向关系,您将像您所说的那样加载大量内存?假设它是打开的,那么就可以了?你明白了。在我的答案中添加了另一个sentenc。那么我该怎么办?我想有一个包含所有贴子的页面,并用一个特定的标记进行标记?@Marc:执行一个查询,如从贴子p中选择p,其中:tag是p.tags的成员。别忘了应用setFirstResult/setMaxResults,因为如果你的数据库很大,你肯定不想看到一个包含所有匹配帖子的页面。但是如果我可以只做例如aTagObject.getPosts,那又有什么意义呢。因为我不能设置setFirstResult和setMaxResults?@Marc:是的。如果您有许多贴子都用特定的标签进行了标记,则不需要一次显示所有贴子。如果你有很多帖子,将它们全部加载到内存中可能会导致性能问题。那么我该怎么办?我想要一个包含所有帖子的页面,并用一个特定的标记进行标记?@Marc:执行一个查询,如SELECT p FROM Posts p,其中:tag是p.tags的成员。别忘了应用setFirstResult/setMaxResults,因为如果你的数据库很大,你肯定不想看到一个包含所有匹配帖子的页面。但是如果我可以只做例如aTagObject.getPosts,那又有什么意义呢。因为我不能设置setFirstResult和setMaxResults?@Marc:是的。如果您有许多贴子都用特定的标签进行了标记,则不需要一次显示所有贴子。如果您有很多帖子,那么将它们全部加载到内存中可能会导致性能问题。