在 Hibernate 中,我们可以通过一对一、一对多等方式映射实体关系。我对使用关系注释有点怀疑,我更喜欢使用单独的查找方法来检索子记录。例如,
让我们考虑一下我有两个表:用户和角色。每个用户可以有一个角色。所以实体是,
class User {
@Column
private String name;
@OneToOne(mappedBy="role_id")
private Role role;
.... getter/setter....
}
class Role {
...
}
我们要么必须进行急切获取,要么如果在当前 session 之外访问该角色,则会导致延迟初始化异常。
我们应该有这样的映射吗?
class User {
@Column
private String name;
@Column
private Long roleId;
....
}
这样,每当我们需要角色详细信息时,我们都可以从 User 对象中获取 role_id 并查询角色表?这是正确的做法吗?是的,我知道加载对象图的好处,但我认为这种方法将避免不必要的急切获取,并且如果我们进行数据库分区,则可以无缝运行。
(我始终将数据库视为数据存储,并使用单独的查询来检索数据,而不是使用联接来避免数据库负载)。
请告诉我你的想法。
最佳答案
我建议使用
class User {
@Column
private String name;
@OneToOne(mappedBy="role_id")
private Role role;
.... getter/setter....
}
class Role {
...
}
看不到调用数据库选择两次的意义。数据库可以很好地处理连接并且选择速度非常快,所以我认为没有必要手动执行此操作。此外,使用这种方法时,您可以轻松保存/更新/删除对象。
为了避免延迟初始化异常,您可以使用 Hibernate.initialize(Object obj) ,如此处所述 How Hibernate.initialize() works 。
关于java - Hibernate 关系映射 - 必须吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033098/