java - Hibernate 关系映射 - 必须吗?

标签 java hibernate

在 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/

相关文章:

java - GAE 抛出堆溢出错误之前的最大对象大小是多少

Spring + JPA + hibernate

java - 如何使用hibernate创建新的oracle数据库

java - 我可以在添加新表后自动更新 Netbeans 中的 Hibernate pojos 和映射吗?

并发更新期间的 Hibernate StaleObjectStateException

java - MySQL:插入查询中出现引号 -> ( ' ) and double quotation -> ( ") 错误

java - Jsoup 无法连接(有时)

java - 使用枚举进行 HQL 查询

java - 如何在同一个 tomcat 服务器上运行基于 angular2 和 spring mvc 的 rest api?

java - 使用 Java ZipOutputStream 和 BufferedOutputStream 的首选方式