0

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

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

我用谷歌搜索并找到了解决此问题的方法。谷歌表示,使用@MapsId将解决这个问题。我用过@MapsId。它对我不起作用。再次谷歌搜索并得到一点,如果我们使用双向关系,那么@MapsId映射 UUID 值。所以@MapsId@OneToMany. 然后我的实体在数据库中持久化。

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

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

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

我的问题:

  • 如何在获取过程中避免父对象来自子对象?

  • 我将使用子对象进行持久化但不用于获取。怎么做?

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

提前致谢。请回复我的询问。

谢谢大王

4

1 回答 1

0

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

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

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

于 2013-10-04T05:17:37.890 回答