#java #hibernate
#java #гибернация
Вопрос:
Я пытаюсь перенести свое приложение с JBoss 7.1.1, используя Hibernate 4.0.1.Final, на JBoss EAP 6.2, который использует версию 4.2.7.SP1.
У меня есть следующая иерархия сущностей:
@MappedSuperclass
@Filters({ @Filter(name = "deleted") })
@FilterDef(name = "deleted", defaultCondition = "deleted is null")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Base implements Serializable {
@Id
@GeneratedValue
private Long id;
@Temporal(TemporalType.TIMESTAMP)
private Date deleted;
// getters/setters...
}
@Entity
@Table(name = "actors"))
@Inheritance(strategy = InheritanceType.JOINED)
public class Actor extends Base {
private String name;
// getters/setters...
}
@Entity
@Table(name = "users")
public class User extends Actor {
private String firstname;
private String lastname;
// getters/setters...
}
Я хочу, чтобы мое приложение отфильтровывало все объекты, для свойства ‘deleted’ установлено значение, отличное от null, и для этой цели я использую фильтры гибернации:
session.enableFilter("deleted");
List<?> list = session.createQuery("from User").list();
// list contains only users with deleted == null
В гибернации 4.0.1 все работает нормально. Но когда я запускаю его в более новой версии, я получаю следующую ошибку:
ERROR: ERROR: column user0_.deleted does not exist
Position: 211
Во время исследования я нашел первую версию, которая нарушает код — 4.1.5.SP1. Я также обнаружил, что это потенциально связано с этим улучшением:
https://hibernate.atlassian.net/browse/HHH-2394
Это ошибка (возможно, введенная в 4.1.5.SP1 и не исправленная до сих пор, т. Е. 4.3.5.Final) или есть другой, более рекомендуемый способ реализации моей функции?