尝试持久化包含成员变量的实体是不可能的,该成员变量是对不在当前持久化上下文中的其他实体的引用,当发生这种情况时,需要获取所需的实体并将其设置在原始实体中尊重这种关系并被允许坚持下去。
当我需要完成此操作时,我通常会使用 EntityManager 的 find 方法,但这会访问数据库并获取整个实体及其可能未针对延迟加载进行注释的关系。我很高兴地发现了 getReference,它可能不会访问数据库,但会返回一个代理表示,其中只有主键可用,而这正是这种情况所需的全部内容。
不幸的是,经过一些调试后,我发现当我通过 Eclipse Debug模式“检查”它时,我能够查看有关 getReference 实体的所有信息,而不仅仅是主键。
我错过了什么吗?我是否被 Debug模式欺骗了?是否可以像在代理引用上使用的 getter 方法一样获取信息?
提前致谢
最佳答案
当您使用 Eclipse 调试器检查它时,调试器会初始化代理。只需打开 SQL 日志记录,执行 em.getReference()
方法,并验证您的 JPA 引擎没有执行任何 select 语句。
关于eclipse - EntityManager 的 getReference 不延迟加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12528051/