我正在用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)吗?
这似乎与这里的问题非常相似: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类从中生成模式创建脚本。