фильтр гибернации с использованием поля из суперкласса

#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) или есть другой, более рекомендуемый способ реализации моей функции?