Hibernate在超类中定义@Where注解

Posted

技术标签:

【中文标题】Hibernate在超类中定义@Where注解【英文标题】:Hibernate define @Where annotation in super class 【发布时间】:2018-12-24 07:23:55 【问题描述】:

我正在尝试在我的 spring - hibernate 项目中实现软删除。 我的计划是使用@SQLDelete 注释覆盖删除方法,并在我的查询中使用休眠@Where 注释过滤逻辑删除的实体。

当我尝试在超类中定义@Where 子句时遇到一些困难,似乎实体没有从抽象基类继承@Where 子句。

注意:如果我将 @Where 注释移动到实体类,一切都会按预期工作

基础实体类:

@MappedSuperclass
@Where(clause = " IS_DELETED = false")
public abstract class BaseEntity 

   @Column(name = "IS_DELETED")
   private boolean isDeleted;

   public BaseEntity() 
   

   public boolean getIsDeleted() 
      return this.isDeleted;
   

   public void setIsDeleted(boolean isDeleted) 
      this.isDeleted = isDeleted;
   
 

实体类:

@Entity
@Table(name = "Events")
@SQLDelete(sql ="UPDATE events " +
                "SET IS_DELETED = true " +
                "WHERE id = ?")
public class Event extends BaseEntity 

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   @Column(name = "ID")
   private Long id;

   @Column(name = "NAME")
   private String name;

   public Event() 
   

   public Long getId() 
      return id;
   

   public void setId(Long id) 
      this.id = id;
   

   public String getName() 
      return name;
   

   public void setName(String name) 
      this.name = name;
   

感谢您的任何帮助:)

【问题讨论】:

【参考方案1】:

尝试将@Inherited注释与@where一起添加。

【讨论】:

我收到编译错误 - “注解类型不适用于这种声明”,这是注解的注解。 那么对不起兄弟..检查任何其他方法。

以上是关于Hibernate在超类中定义@Where注解的主要内容,如果未能解决你的问题,请参考以下文章

在超类中定义泛型类型,它指的是它所在的子类的类型

在超类中使用描述符以避免子类中的代码重复

在超类中中断 super.onCreate()

在 Python 的超类中调用超类方法

点击backBarButtonItem时消息怎样拦截

如何将hibernate注解应用于抽象类的子类