Hibernate 如何初始化JPA中几个层次的惰性实体?
我有几层深厚的感情:Hibernate 如何初始化JPA中几个层次的惰性实体?,hibernate,jpa,lazy-loading,Hibernate,Jpa,Lazy Loading,我有几层深厚的感情: class Person { @Id @Column(name = "PERSON_ID") private Long personId; @OneToMany(fetch = FetchType.EAGER, mappedBy = "person") private Set<Parameter> parameters; [... various other attributes omitted
class Person {
@Id
@Column(name = "PERSON_ID")
private Long personId;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "person")
private Set<Parameter> parameters;
[... various other attributes omitted]
}
class Parameter {
@Id
@Column(name = "PARAMETER_ID")
private Long personId;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "GAME_ID", nullable = false)
private Game game;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PERSON_ID")
@JsonIgnore
private Person person;
[... various other attributes omitted]
}
class Game {
@Id
@Column(name = "GAME_ID")
private Long gameId;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "game") // this is the attribute, that sometimes is required sometimes is not
private Set<GameRule> gameRules;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "game")
@JsonIgnore
private Set<Parameter> parameters;
[... various other attributes omitted]
}
class GameRule {
@Id
@Column(name = "GAME_RULE_ID")
private Long gameRuleId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="GAME_ID", nullable = false)
@JsonIgnore
private Game game;
[... various other attributes omitted]
}
班级人员{
@身份证
@列(name=“PERSON\u ID”)
私人长人形;
@OneToMany(fetch=FetchType.EAGER,mappedBy=“person”)
私有设置参数;
[…省略了各种其他属性]
}
类参数{
@身份证
@列(name=“PARAMETER\u ID”)
私人长人形;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“GAME\u ID”,nullable=false)
私人游戏;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“PERSON\u ID”)
@杰索尼奥雷
私人;
[…省略了各种其他属性]
}
班级游戏{
@身份证
@列(name=“GAME\u ID”)
私有长配子体;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“game”)//这是属性,有时是必需的,有时不是
私人游戏规则;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“game”)
@杰索尼奥雷
私有设置参数;
[…省略了各种其他属性]
}
类游戏规则{
@身份证
@列(name=“游戏规则ID”)
私有长配子规则体;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“GAME\u ID”,nullable=false)
@杰索尼奥雷
私人游戏;
[…省略了各种其他属性]
}
有谁能告诉我在查询人时如何使用game.gameRules
加入fetch?
我尝试在游戏
上创建@NamedEntityGraph
(使用游戏规则
属性),
并将其与@EntityGraph
一起在person
的存储库findAll
中使用,但使用
person
存储库中的entitygraph导致异常Hibernate无法在person
中找到gameRules
属性(这并不奇怪)
那么,如何在成员级别上初始化一个惰性实体呢?
谢谢,因为您的关系在本例中是嵌套的,所以您需要使用子图
和@NamedSubgraph,如下所示
使用graph.person.parameters
作为存储库方法中的图形名称
@NamedEntityGraph(name = "graph.person.parameters", attributeNodes = {
@NamedAttributeNode(value = "parameters", subgraph = "parameters.game") }, subgraphs = {
@NamedSubgraph(name = "parameters.game", attributeNodes = {
@NamedAttributeNode(value = "game", subgraph = "game.gameRules") }),
@NamedSubgraph(name = "GameRule ", attributeNodes = {
@NamedAttributeNode(value = "GameRule ") }) })