我有以下场景(在 Java / Hibernate 中):
- 我有两个实体类:X 和 Y。X 与未级联的 Y 有一个 @ManyToOne 关联。
- 我创建了一个 X 的(非托管)实例 x 和一个 Y 的(非托管)实例 y,并在 x 中填充了对 y 的引用。y 中唯一填充的字段是主键。
- 实体 y 在底层数据库中已经有对应的行,但实体 x 是新的。
- 我坚持实体 x。
当我执行这个场景时,我希望看到一个查询:INSERT x。然而,实际发生的是 Hibernate 执行了两个查询:
- 选择 y
- 插入 x
此外,我还注意到,在 x 的持久化之后,对 y 的引用实际上并没有成为托管的,并且会话中没有 Y 的实例!那么,为什么要执行 y 上的 SELECT 呢?有没有办法防止这种行为?