栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

null
值。

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

解决方案:

  1. 字节码检测。虽然没有被广泛采用。
  2. 使用一对多,并以处理空列表
    null
    ,否则使用
    list.get(0)
    。您当然可以将其封装在实体类中(getter返回列表或的唯一元素
    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;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/430980.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号