Я использую JPA 2 и Hibernate 3. Я заметил, что вызов EntityManager.merge()
вызывает SELECT для каждой ссылочной сущности в графе объектов, плюс внутренние соединения между некоторыми из них.
Предположим, вы хотите объединить() a FooBar.
@Entity
public class FooBar {
@ManyToOne
private Foo foo;
@ManyToOne
private Bar bar;
}
@Entity
public class Foo {
@ManyToOne
private Baz baz;
}
@Entity
public class Bar {
@ManyToOne
private Baz baz;
}
Если вы это сделаете, Hibernate выдаст SELECT для каждого из FooBar, Foo и Bar и два для Baz.Затем он выдаст SELECT для Foo, соединенного с Baz, и еще один для Bar, соединенного с Baz.Поскольку я просто хотел объединить FooBar, я ожидал от него одного SELECT, но в итоге я получил колоссальные 7 SELECT!
Прежде всего, это нормально?Во-вторых, если это так, есть ли способ выдать только один SELECT?
Спасибо.