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