Java JPA按实体或Id映射OneToOne
以下映射的原因是什么Java JPA按实体或Id映射OneToOne,java,hibernate,jpa,spring-data,Java,Hibernate,Jpa,Spring Data,以下映射的原因是什么 @Column(name = "inspection_platform_id") private Long inspectionPlatformEntityId; @OneToOne(fetch = FetchType.LAZY) @JoinColumn(name = "inspection_platform_id", insertable = false, updatable = false) private
@Column(name = "inspection_platform_id")
private Long inspectionPlatformEntityId;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "inspection_platform_id", insertable = false, updatable = false)
private InspectionPlatformEntity inspectionPlatformEntity;
如果我们为整个实体指定了映射,并且可以轻松地从该实体提取ID,那么为什么我们需要为外键指定映射呢
我有一个建议,这是由于延迟加载,因此我们不需要获取整个实体来提取它的ID,但我也看到了这种使用“急切获取”类型的方法,因此我不理解这样做的原因:
- JPQL中关系上的JPA点符号“.”指定内部联接,或者必须显式定义要忽略的联接
“从实体e中选择实体,其中e.inspectionPlatformEntity.id=:value”
不需要表联接,但您由JPA提供程序决定,并且必须了解FK存在于关系的哪一侧。拥有基本映射可以使它更清晰,并允许您在需要时精确定义所需内容
- 序列化。在某些情况下,您可能希望在别处序列化ID,但不需要序列化对象。写出此对象时,由于inspectionPlatformEntity的联接列为insertable/Updateable=false,因此不需要将此引用对象与此实体一起序列化
- 这使得批量更新更加高效,因此您不需要获取大量InspectionPlatformEntity实例来检查它们是否存在并需要更新。我可以将该关系保留为null,JPA将忽略它,不管是否懒惰
- 重构。我们的开发者不知道他们是需要参考还是仅仅需要FK值。让所有的东西都通过引用对象迫使我总是在他们需要的地方加载它。给他们FK值让我可以选择在某些用例中加载引用,或者让他们在其他用例中使用FK值查找引用。在编写用例时,他们不需要知道什么对他们的用例更有效,我们可以在确定应该做什么之前进行测试
- 缓存。如上所述,通过序列化,我可能需要缓存该实体,在某些情况下,我希望使用它缓存引用的实体,或者在某些对象图中,能够在不丢失仍然存在的关系的知识的情况下将其清空