一对一Spring JPA和构建“动态” JSON

一对一Spring JPA和构建“动态” JSON,第1张

一对一Spring JPA和构建“动态” JSON

如果连接列不在一对一关联中的父级映射到的表中,则关联不能是lazy。原因是JPA提供程序无法确定是否创建代理,以便它可以在以后访问时加载对象或保留

null
值。

即使关联不是可选的,JPA提供程序也必须确定关联实体实例的ID才能将其存储在代理中。因此,它无论如何都必须转到关联的表。

解决方案:

  1. 字节码检测。虽然没有被广泛采用。
  2. 使用一对多并以处理空列表
    null
    ,否则使用
    list.get(0)
    。您当然可以将其封装在实体类中(getter返回list或的唯一元素
    null
    )。缺点是您必须将其视为JPQL查询中的集合。
  3. 使用
    @PrimaryKeyJoinColumn
    代替外键。如果关联不是可选的(
    optional = false
    ),则JPA提供程序知道存在一个具有相同PK的关联子项,因此它将仅将父项的PK作为子项的ID存储在代理中。显然,您不能为两个实体使用两个独立的ID生成器,否则PK可能会有所不同。如果满足您的要求,这是最好的方法。
  4. 还要在父表中添加外键(在数据库中也使关系成为双向的)。缺点是您现在基本上必须维护两个独立的关联。同样,更新两个表而不是更新一个表也会带来性能成本(并且外键必须为空)。
  5. 将父实体映射到一个数据库视图,该数据库视图将父表与子表连接在一起,并且包含所有父列以及子表的ID:
@oneToOne(fetch = FetchType.LAZY)@JoinColumn(name = "<child id in the view>", insertable = false, updatable = false)private Child child;


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5153032.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-18
下一篇2022-11-18

发表评论

登录后才能评论

评论列表(0条)

    保存