JPA Criteria API递归获取延迟关联

时间:2019-01-23 11:30:18

标签: java hibernate jpa criteria hibernate-criteria

我有一个与自身有关联的递归实体。

@Entity
public class Function {
    (...)

    @ManyToMany(fetch = FetchType.LAZY)
    private Set<Function> children = new HashSet<>();
}

如果该关联渴望使用@ManyToMany(fetch = FetchType.EAGER),则其所有子级始终将在一次访问数据库的情况下进行初始化。当然,我不希望这种联系变得渴望。

使用JPA Criteria API,可以使用someRoot.fetch(Function_.children)获取集合。但是,这只能将其获取一个级别的深度,并且不像渴望的获取类型那样递归。

是否有一种方法可以递归地获取其子代而不使其成为一个渴望的关联?

1 个答案:

答案 0 :(得分:0)

我已选择为同一张表进行多个映射。这样做有一定的危险,但是由于实体的寿命很短,并且其中只有一个需要写,所以很好。

就我而言,其中一个甚至不需要访问其子级,从而进一步简化了我的此实体。

@MappedSuperclass
public class BaseFunction {
    (...)
}
@Entity
@Table(name = "function")
public class RecursiveFunction extends BaseFunction {

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<RecursiveFunction> children = new HashSet<>();
}
@Entity
@Table(name = "function")
public class SimpleFunction extends BaseFunction {}