Hibernate @Where 未在 @MappedSuperClass 实体中强制执行
Posted
技术标签:
【中文标题】Hibernate @Where 未在 @MappedSuperClass 实体中强制执行【英文标题】:Hibernate @Where is not enforcing at @MappedSuperClass Entity 【发布时间】:2014-11-17 03:16:26 【问题描述】:为了从 eclipse 链接迁移到 hibernate,我正在寻找相当于 eclipse 链接注释 @AdditionalCriteria
在 Hibernate 中的 @MappedSupperClass
BaseEntity
级别,以过滤从扩展此 BaseEntity
的所有实体中逻辑删除的记录。
我找到了@Where
注释。但是,这仅适用于Entity
级别,不适用于 BaseEntity。请让我知道是否有可能添加此注释或任何其他 Hibernate 注释以过滤 BaseEntity
。
@MappedSuperclass
@Where(clause = "DEL_IND = 0") // DOES NOT WORK
public abstract class BaseEntity implements Serializable
private static final long serialVersionUID = 1L;
@Column(name = "DEL_IND")
private boolean deleted = Boolean.FALSE;
public boolean getDeleted()
return deleted;
public void setDeleted()
this.deleted = Boolean.TRUE;
@Entity
@Table(name = "PERSON")
@Where(clause = "DEL_IND = 0") // THIS WORKS BUT NEEDS TO BE REPEATED IN ALL ENTITIES
public class Person extends BaseEntity implements Serializable
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
@Column(name = "PERSON_ID")
private Integer id;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "FIRST_NAME")
private String firstName;
--------------------
getters & setters
--------------------
--------------------
【问题讨论】:
【参考方案1】:您可以为此打开一个 Hibernate JIRA 问题。唯一的解决方法是手动将@Where
注释添加到您的所有实体或使用过滤器。
使用过滤器,您可以选择动态启用/禁用它们,这很有用,因为您有时可能想要获取已删除的项目。
【讨论】:
以上是关于Hibernate @Where 未在 @MappedSuperClass 实体中强制执行的主要内容,如果未能解决你的问题,请参考以下文章
HIbernate 一对一注释未在依赖表中生成外键 GerericGenerator