我是Hibernate的新手,我有一个基本问题。我有两个实体类User和Comments,其关系定义为从用户到注释为一对多,从注释到用户为多对一。现在,如果我的用户界面向我发送了一些带有comment_text和user_id的评论,那么最好的保存方法是什么?通过定义@ManyToOne 私人用户用户; 我需要使用整个用户对象来存储此信息,但是,我所需要的只是在表中存储带user_id的注释,并在需要时查询用户信息。
我是Hibernate的新手,所以它实际上可能只是基础知识,但是有人可以帮助我吗?
答案 0 :(得分:1)
用户和评论之间的关系是多对多的,因此您可以尝试使用以下字段创建表:
答案 1 :(得分:0)
您的问题触及2个要点。
拥有完全连接的数据库模型是导致性能低下和大量纠缠的秘诀。
从设计的角度来看,您可能不想在创建,更新或删除注释时更改用户。因此,在Hibernate中,您可能会跳过Comment
和User
之间的关系,并在加载注释时以另一种方式获取用户信息(因为我假设您想在用户名旁边显示用户名)。评论)。因此,当您收到一条文本和一个用户ID时,可以立即存储该文本,但要记住要检查一下该用户ID是否确实是发布评论的用户ID,而不是发送伪造数据的用户ID。
现在从用户的角度进行思考。加载用户时是否总是需要评论信息? (由于默认情况下所有* toMany关系都是惰性的,因此Hibernate会延迟加载注释数据。)从设计的角度来看,您的实体之间的联系越紧密,进行细小的更改就越有可能破坏某些东西。
在这种情况下对我有帮助的事情是找出哪些数据一起更改或存在相互依赖的约束。如果没有,则可以将这些对象分离。而且,在需要提高性能的情况下,可以有一些只读实体,这些实体可以映射某些视图所需的所有数据。
我建议您阅读本书Implementing Domain-Driven Design,因为它涉及到这些主题,并且它是有关设计的很好建议的绝佳来源,并且在示例中恰好使用Java + Hibernate!