1

假设我有一个关系主从。在数据库中存在 id=1 的表 Master 中的一行。为什么以下代码有效:

    Slave slave = new Slave();
    slave.setId(1L);

    Master master = new Master();
    master.setId(1L);
    slave.setMaster(master);
    em.persist(slave);

所以 Master 是分离的实体,在从属和主控之间创建提交引用之后。为什么?我认为在这种情况下,我们必须通过“查找”功能从数据库中读取主行。我在哪里可以阅读更多关于它的信息?

4

1 回答 1

1

欢迎来到 Hibernate 关系的黑暗之地。首先,如果您想了解发生了什么,请添加到 hibernate.cfg.xml

<property name="show_sql">true</property>

多亏了这一点,您将在控制台中看到 Hibernate 为您执行的所有 SQL 查询——这是了解 Hibernate 在给定时刻如何工作的最佳方式。

回到你意想不到的结果。重要的是谁拥有关系。在你的情况下,我猜在从表中有一个指向主表主键的外键(显然你也可以使用连接表 - 没关系)。

Hibernate 在创建关系时只关心拥有关系的那一方 - 在您的情况下,将有关新关系的信息保存在从表中就足够了。事实上,Master 不需要知道关系,所以没有必要在那个实体上调用 save。这就是您的代码有效的原因。

有帮助的阅读:

于 2012-04-24T22:13:08.087 回答