Я знаю, что есть несколько сообщений об этом, но им около года, а ответа нет. На самом деле мы используем Hibernate 4.2.1.Final вместо PostgreSQL 8.4. У нас есть два таких объекта
Объект A (высший класс иерархии)
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Polymorphism(type = PolymorphismType.EXPLICIT)
public class A {
@Id
@GeneratedValue
private Long id;
public A() {
}
public A(Long id) {
super();
this.id = id;
}
// Setters, getteres, hashCode and equals
}
Объект B (подкласс)
@Entity
public class B extends A{
String value;
public B(){
}
public B(String value) {
super();
this.value = value;
}
public B(Long id, String value) {
super(id);
this.value = value;
}
// Setters, getteres, hashCode and equals
}
Как видите, сущность аннотируется PolymorphismType.EXPLICIT
, но при получении верхнего класса с помощью
ArrayList<A> lista = (ArrayList<A>) session.createCriteria(A.class).list();
мы также получаем подклассы B со свойством String value
. На самом деле оператор SQL содержит left outer join B
. Это все-таки баг четвертой версии Hibernate или я что-то не так делаю?
С наилучшими пожеланиями