EclipseLink:在具有JOINED策略的子类实体上使用查询重定向器

时间:2016-07-19 08:04:49

标签: jpa inheritance orm eclipselink soft-delete

我的实体级层次结构以MappedSuperclass开头,提供" status"属性并在"删除":

的情况下声明查询重定向器
@MappedSuperclass
@AdditionalCriteria(value = "this.entityStatus <> 'DELETED'")
@QueryRedirectors(delete = LogicDeleteInterceptor.class)
public abstract class AStatusEntity
{
    private String entityStatus;
    ...
}

然后是一个来自AStatusEntity的User实体,为更多的子类声明了JOINED策略:

@Entity
@Table(name = "USERS")
@Inheritance(strategy = InheritanceType.JOINED)
public class User extends AStatusEntity
{
    ...
}

最后是UserProfile实体,派生自User:

@Entity
@Table(name = "USER_PROFILE")
public class UserProfile extends User
{
    ...
}

User实体正确地继承了删除重定向器,因此当我调用&#34; remove&#34;时,它会被软删除(status =&#34; DELETED&#34;)。在它上面。

对于UserProfile,情况有所不同:当我打电话&#34;删除&#34;在UserProfile实体实例上,忽略删除重定向器(在调试期间忽略重定向器主体中的任何断点),EclipseLink尝试硬删除DB上的UserProfile行和User行(JOINED strategy =&gt;两个不同的表) )。

我已尝试在UserProfile类本身上应用重定向器,如下所示:

@Entity
@Table(name = "USER_PROFILE")
@QueryRedirectors(delete = LogicDeleteInterceptor.class)
public class UserProfile extends User
{
    ...
}

但它仍然被忽略,并尝试进行硬删除。

我缺少什么?...

环境: EclipseLink版本是2.6.3 | Oracle JVM 1.8.0_91 x64 |执行环境:Apache Karaf OSGi容器版本4.0.4 |操作系统:Ubuntu Linux x86_64

0 个答案:

没有答案