![](/img/trans.png)
[英]Hibernate L2 cache issues with EntityGraph and LEFT JOIN FETCH queries
[英]EntityGraph or Join Fetch with Inheritance in JPA/Hibernate
我正在使用 JpaRepositories 處理 JPA/Hibernate 實體。 我很少有具有@OneToOne
和@OneToMany
關系的實體。 為了使代碼簡潔明了,我將實體命名為 A、B、C、D 等。A 是根實體,鏈下有 Inheritance 和 Joined 策略。 請看下面的代碼 -
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
}
如果您看到 inheritance 從作為父實體的實體 D 開始,G 和 F 擴展了 D。我需要通過 EnityGraph 或 Join fetch 獲取所有實體。 所有的協會都是懶惰的。 我有根 A 的 id。當我調用aRepository.findById(aId);
我嘗試了很多解決方案,但我無法獲取。 創建 EntityGraph 的問題是實體鏈之間的 inheritance。 我能夠獲取的唯一方法是當我建立關聯時 EAGER。 我不想將@OneToMany
映射作為 EAGER。
誰能建議我執行此任務的解決方案( @EntityGraph
或 Join Fetch)?
這似乎與這里的問題非常相似: https://stackoverflow.com/a/61272573/412446
我認為您可以推斷實體圖不能用於此目的。 如果您願意,您可以使用連接提取,但我認為 Spring 數據 JPA 存儲庫只能用於實體圖。 你仍然可以使用Blaze-Persistence Entity-Views :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.