我有很多从抽象类继承的实体,现在我希望在继承这个抽象类的每个实体上执行where子句。问题是where子句不起作用。有人知道解决这个问题的办法吗?我希望childClass自动执行超级类的where子句。
@MappedSuperclass
@Where(clause = "comp= 100")
@Getter @Setter
public abstract class AbstractLiferayEntity {}
@Entity
@Table(name = "Let")
@Getter
public class LiferayLayoutSet extends AbstractLiferayEntity{}
我尝试了这个想法,我想创建一个新的注释,使用where子句并添加继承到其中,但它不起作用
@Target({TYPE})
@Retention(RUNTIME)
@Inherited
@Where(clause = "comp=100")
public @interface WhereClause{
}
@MappedSuperclass
@WhereClause
public abstract class AbstractLiferayEntity {}
//第二次尝试
@Target({TYPE})
@Retention(RUNTIME)
@Inherited
public @interface WhereClause {
Where clause();
}
@MappedSuperclass
@Getter @Setter
@WhereClause(clause = @Where(clause = "comp=100"))
public abstract class AbstractLiferayEntity
是的,这是可能的,但需要一些额外的编码/配置。问题的根本原因是@Where
不是继承的,但是HBN确实允许执行一些技巧来实现这一点——我们以前也这样做过:
4类支持功能:
- PropagateAnnotationReader.java
- PropagateAnnotations.java
- PropagateMetadataBuilderFactory.java
- 传播元数据提供者.java
HBN SPI配置
MappedSuperClass