hibernate过滤器使用来自超类的字段

时间:2014-06-21 11:04:19

标签: java hibernate

我正在尝试使用Hibernate 4.0.1.Final将我的应用程序从JBoss 7.1.1迁移到使用版本4.2.7.SP1的JBoss EAP 6.2。

我有以下实体层次结构:

@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...
}

我希望我的应用过滤掉所有被删除的对象'属性设置为非空值,为此我使用Hibernate过滤器:

session.enableFilter("deleted");
List<?> list = session.createQuery("from User").list();
// list contains only users with deleted == null

在Hibernate 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)或者是否有另一种更推荐的方法来实现我的功能?

0 个答案:

没有答案