我有以下场景(在Java / Hibernate中):
当我执行这个场景时,我希望看到一个查询:INSERT x。然而,实际发生的是Hibernate执行两个查询:
此外,我还注意到在x的持续存在之后,对y的引用实际上并没有被管理,并且会话中没有Y的实例!那么,为什么要执行SELECT上的SELECT呢?有没有办法防止这种行为?
答案 0 :(得分:2)
您不需要(实际上您不应该)手动实例化Y.您可以执行此操作的变体(取决于您的配置)
Y y = (Y) session.load(Y.class, pk);
这不会从数据库中检索Y,而是加载仅由您提到的pk组成的代理。
然后将y分配给x,并且持久化x将按预期运行。