当前位置: 首页 > 知识库问答 >
问题:

在JPA/Hibernate中具有继承的EntityGgraph或Join Fetch

羊舌自强
2023-03-14

我正在用JpaRepository处理JPA/Hibernate实体。我有几个实体与@OneToOne@OneToMore关系。为了使代码简短,我将实体命名为A、B、C、D等。. A是根实体,链下有继承与连接策略。请看下面的代码-

A.java

@Entity
@Table(name = "A")
public class A {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long aId;

    @Column
    private String name;

    @OneToOne
    @JoinColumn(name = "bId")
    private B b;

    @OneToMany(mappedBy = "a")
    private Set<C> cSet;
    
    // other entity specific fields
    // getters and setters
}

B.java

@Entity
@Table(name = "B")
public class B {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long bId;

    // other entity specific fields
    // getters and setters
}

C.java

@Entity
@Table(name = "C")
public class C {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long cId;

    @ManyToOne
    @JoinColumn(name = "aId", referencedColumnName = "aId")
    private A a;

    @OneToMany(mappedBy = "c")
    private Set<D> dSet;

    // other entity specific fields
    // getters and setters
}

D. java

@Entity
@Table(name = "D")
@Inheritance(strategy = InheritanceType.JOINED)
public class D {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long dId;

    @ManyToOne
    @JoinColumn(name = "cId", referencedColumnName = "cId")
    private C c;

    @OneToMany(mappedBy = "d")
    private Set<E> eSet;

    // other entity specific fields
    // getters and setters

}

E.java

@Entity
@Table(name = "E")
public class E {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long eId;

    @ManyToOne
    @JoinColumn(name = "dId", referencedColumnName = "dId")
    private D d;

    // other entity specific fields
    // getters and setters
}

f. java

@Entity
@Table(name = "F")
public class F extends D {

    @OneToMany(mappedBy = "d")
    private Set<H> hSet;

    // other entity specific fields
    // getters and setters
}

G.java

@Entity
@Table(name = "G")
public class G extends D {

    @OneToMany(mappedBy = "d")
    private Set<I> iSet;

    // other entity specific fields
    // getters and setters
}

H.java

@Entity
@Table(name = "H")
public class H {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long hId;

    @ManyToOne
    @JoinColumn(name = "dId", referencedColumnName = "dId")
    private D d;

    // other entity specific fields
    // getters and setters
}

I.java

@Entity
@Table(name = "I")
public class I {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long iId;

    @ManyToOne
    @JoinColumn(name = "dId", referencedColumnName = "dId")
    private D d;

    // other entity specific fields
    // getters and setters
}

如果您看到继承从实体D作为父实体开始,那么G和F扩展了D。我需要通过EnityGraph或Join fetch获取所有实体。所有的联想都是懒惰的。我有根A的id。当我调用<代码>正向。findById(援助)

我尝试了许多解决方案,但我无法获取。创建实体图的问题是实体链之间的继承。我能够获取的唯一方法是当我创建EAGER关联时。我不想将@OneTo很多映射设置为EAGER。

有人能给我推荐一个执行这项任务的解决方案(无论是@EntityGraph还是Join Fetch)吗?

共有1个答案

詹亮
2023-03-14

这似乎与这里的问题非常相似:https://stackoverflow.com/a/61272573/412446

我想你可以推断出实体图不能用于此。如果需要的话,可以使用join-fetch,但我认为Spring数据JPA存储库只能处理实体图。不过,您仍然可以使用Blaze持久性实体视图:)

 类似资料:
  • 问题内容: 我在我的班级结构上定义了一个复合ID,如下所示。不幸的是,我总是收到一个hibernate错误,抱怨找不到的“ part2”: “在实体MoreClass中找不到@IdClass的属性:第2部分” 有人可以帮我解决问题吗?(或者至少在一个有用的jpa / hibernate文档上指向我?) 问题答案: 居然撞到了。 如: 确实可行,我认为这是一个错误。参见https://hiberna

  • 我有一个项目,其中一部分数据结构是用@ Inheritance(strategy = Inheritance type)制作的。已加入)。数据结构的这一部分看起来像这样: 该设计基于本文的思想。我使用Hibernate和JPA2接口作为我的数据层。上面的结构产生了下面的pojo/dao类(省略了getter和setter): 基本项: 物理项目: 一些硬件: 其他硬件: 这是我的问题: 我的另一个

  • 我有一个关于JPA中继承的问题,是否可以使用JOINED策略来实现这个层次结构? 这是我的代码: 在上面的层次结构之后,我尝试使用JPQL进行查询,这是查询: 此代码从主代码运行 当我运行该查询时,会抛出以下错误 导致原因:com . MySQL . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:未知列“employee1_。“字段

  • 我有一个用JPA映射的简单类: 我把那门课扩展成了非常简单的课 这正是我对SponsorDefainableBo所需要的。它是Sponsor的副本,并且从与Sponsor相同的表中读取。这是我们通过一些xml文档控制的查询框架所需要的,并且需要成为我正在做的事情的单独对象。需要SponsorDefainableBo插入查询/维护框架以进行我们不想在主父文档中进行的自定义详细信息。当我尝试使用Spo

  • 问题内容: 嗨,我是JPA的新手,我在理解它如何处理继承方面遇到困难。 我有一个需要解决的特定问题,而无需更改数据库方案,但是如果您找不到解决方案,我将感谢使用其他数据库方案的解决方案建议(欢迎使用Hibernate / TopLink解决方案)。 如果我不清楚或您需要更多信息,请告诉我。提前致谢! 我有这个数据库: 到目前为止,我的实体看起来像这样: 目前,我能够持久地保存Fruit对象。.仅当

  • 问题内容: 您将如何在以下示例代码中配置注释?我只想保留JPA注释,避免使用Hibernate特定的依赖项。 下面的代码正确吗? (这些类将具有多个版本,RefSomeOtherExample等,并且每个类一个db表。有些可能会添加其他字段(列),但大多数只会使用继承自“ RefData”基类的基本字段。) 基类: 最终,我想使用Hibernate的SchemaExport类从中生成模式创建脚本。