繁体   English   中英

JPA:如何在获取过程中避免双向值?

[英]JPA : how to avoid bi-directional values during fetching?

我在我的项目中使用JPA。 最初,当我声明没有双向关系的实体时我没有任何问题。 因为我的要求是,所以我们仅将jpa用于从db中获取值。 因此,从设计角度来看,我们删除了不需要的双向场。 示例: 实体A将B作为子代,但B没有A。

第二件事,我们更新了需求2的代码。它以UUID为键将实体持久存储在数据库中。 由于某些表将此UUID关联为主键。 所以我用@GenerateValue并创建了一个实体。 它适用于主表。 但我没有映射到子表。 抛出无法插入NULL异常

我搜索了一下,找到了解决此问题的方法。 谷歌表示,使用@MapsId将解决此问题。 我使用了@MapsId 它对我没有用。 再次@MapsId搜索并指出,如果我们使用双向关系,则@MapsId映射UUID值。 因此,我在@OneToMany引入了@MapsIdmapbyby双向属性。 然后,我的实体就保留在数据库中。

现在我的问题是,要求的性能下降了。 因为,由于我的更新(双向关系),每个实体都使用双向对象( 数量巨大 -数百万个)从数据库中提供数据。

 My Code: 
 `Parent{
    @-----(mappedby = "parent")
    @PrimaryKeyJoinColumn
    private Set<Child> childs;
 }`

 `Child{
    @JoinColumn(name = "id")
    private Parent parent;
 }`

我的问题:

  • 如何在获取过程中避免子对象的父对象?
  • 我将使用子对象进行持久化,但不进行获取。 怎么做?

    如果我使用parent.getChild(),则需要子值,但是,如果我使用parent.getChild()。getParent(),则需要null ...我应该如何配置?

提前致谢。 请答复我的要求。

谢谢国王

jpa EAGER和LAZY fetch中的两种类型的访存

EAGER策略是对持久性提供程序运行时的要求,必须热切地获取数据(在一个查询中获取)。 即一对多关系学校有很多学生,然后您重复学校对象的学校名称,学校地址和所有学生的学生证,学生名单

LAZY策略向持久性提供程序运行时提供了一个提示,即在首次访问数据时应延迟获取数据(在需要时作为子查询获取)。 即,当您获取学校对象,然后在调用学校的getStudents()方法时在运行时按需加载学生对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM