我有许多JPA类,包含各种组合的某种类型的字段。这看起来像这样:
// entity to initialize
@Entity
class Type {
...
@ManyToOne(fetch = LAZY)
B b;
}
// containers
@Entity
class A {
...
@ManyToOne(fetch = LAZY)
Type type;
}
@Entity
public class B {
...
@ManyToOne
C c;
@OneToMany(fetch = LAZY)
List<Type> possibleTypes;
}
@Entity
public class C {
...
@OneToMany
List<B> b;
@OneToOne(fetch = LAZY)
Type type;
}
是否可以使用一个Type
初始化所有SELECT
字段而无需构建手动请求或逐个初始化字段并进行多次Hibernate.initialize()
次调用?像
List<Type> possibleProxies = new ArrayList<>();
possibleProxies.add(a1.getType());
for (B b : c1.getB()) {
possibleProxies.addAll(b.getPossibleTypes());
}
possibleProxies.add(c1.getType());
initializeAll(possibleProxies);
其中Hibernate或其他库会检查某些对象是否已经初始化并根据JPA映射构建正确的SELECT
查询