为什么引用分离的实体工作?jpa hibernate

时间:2012-04-24 21:46:56

标签: hibernate jpa entity

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

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

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

所以Master是分离的实体,并且在创建了slave和master之间的commit refence之后。为什么?我想知道,在案例中我们必须通过“find”函数从数据库中读取Master行。 我在哪里可以阅读更多相关信息?

1 个答案:

答案 0 :(得分:1)

欢迎来到Hibernate关系的黑暗之地。首先,如果你想了解添加到你的hibernate.cfg.xml

的内容
<property name="show_sql">true</property>

感谢您在控制台中看到Hibernate为您执行的所有SQL查询 - 这是了解Hibernate在特定时刻如何工作的最佳方式。

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

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

有用的阅读: