JPA:如何在提取期间避免双向值?

时间:2013-10-04 01:59:14

标签: java hibernate

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

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

我用谷歌搜索并找到了解决此问题的方法。 Google表示,使用@MapsId将解决此问题。我用了@MapsId。它不适合我。再次用Google搜索并得到一个观点,如果我们使用双向关系,那么@MapsId会映射UUID值。所以,我在@MapsId中引入了双向@OneToMany mappedby 属性。然后我的实体在数据库中持久存在。

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

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

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

我的问题:

  • 如何在抓取过程中避免使用子对象的父对象?
  • 我将使用子对象来持久化而不是用于获取。怎么办?

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

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

谢谢, 景

1 个答案:

答案 0 :(得分:0)

jpa EAGER和LAZY fetch中有两种类型的提取

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

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