Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何初始化JPA中几个层次的惰性实体?_Hibernate_Jpa_Lazy Loading - Fatal编程技术网

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 ") }) })