经过一些令人沮丧的问题和测试后,我了解到 Hibernate 无法延迟获取 ToOne 关系。从我所读的内容来看,Hibernate 通过将其自己的 Set 设置为代理来延迟获取 ToMany,并且...
经过一些令人沮丧的问题和测试后,我了解到 Hibernate 无法延迟获取 ToOne 关系。
据我所知,hibernate 通过将其自己的 Set 设置为代理来延迟获取 ToMany,并且当在该 Set 上调用方法时,它会在执行操作之前获取数据库中的数据。很好。
对于 ToOne,我看到的原因是,由于属性可以为 null(与 ToMany 不同),因此 hibernate 必须知道是否需要用 null 或代理来填充它,并且 hibernate 如果不查询另一个表就无法知道这一点。而且由于它必须查询另一个表,因此它会同时急切地获取数据。
我觉得这很愚蠢。我可以在关系的非拥有方理解这一点,其中表中没有任何内容表明 toOne 是否已填充,但在拥有方,表包含一个带有外键的列,该列为空或不为空。
为什么 Hibernate 不能查询表并根据该列的值将属性设置为 null 或代理?它不需要检查第二个表,如果您的列不为 null,您就知道第二个表有一个相应的条目(如果没有,则存在完整性问题,Hibernate 应该抛出)。