Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa EclipseLink:在具有联接策略的子类实体上使用查询重定向器_Jpa_Inheritance_Orm_Eclipselink_Soft Delete - Fatal编程技术网

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

Jpa EclipseLink:在具有联接策略的子类实体上使用查询重定向器,jpa,inheritance,orm,eclipselink,soft-delete,Jpa,Inheritance,Orm,Eclipselink,Soft Delete,我的实体类层次结构从一个MappedSuperclass开始,它提供一个“status”属性,并在“delete”的情况下声明一个查询重定向器: 最后是一个UserProfile实体,来自用户: @Entity @Table(name = "USER_PROFILE") public class UserProfile extends User { ... } 用户实体正确地继承了删除重定向器,因此当我调用“删除”时,它会被软删除(status=“deleted”) 对于UserPro

我的实体类层次结构从一个MappedSuperclass开始,它提供一个“status”属性,并在“delete”的情况下声明一个查询重定向器:

最后是一个UserProfile实体,来自用户:

@Entity
@Table(name = "USER_PROFILE")
public class UserProfile extends User
{
    ...
}
用户实体正确地继承了删除重定向器,因此当我调用“删除”时,它会被软删除(status=“deleted”)

对于UserProfile,情况就不同了:当我在UserProfile实体实例上调用“remove”时,删除重定向器被忽略(在调试期间,重定向器主体中的任何断点都被忽略),EclipseLink尝试硬删除DB上的UserProfile行和用户行(联接策略=>两个不同的表)

我已尝试在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 | OS:Ubuntu Linux x86 | 64

如果打开日志记录到finest,在子类上有重定向器时,应该会看到“元数据警告(u忽略)继承(u子类)u默认(重定向器)类型的警告。我相信这可能是一个bug,但代码可能会假设父类的重定向器被子类拾取,而在您的情况下它们不是。如果您能够进行调试,那么在调用重定向程序之前EclipseLink代码中的一些断点应该确认它在子类中为null,并且应该提交一个bug。一种解决方法是在所有子描述符上的自定义程序中添加重定向器。hi@Chris,我按照您的建议进行了一次调试:以下链
org.eclipse.persistence.querys.DatabaseQuery.getRedirectorForQuery()=>org.eclipse.persistence.querys.DeleteObjectQuery.getDefaultRedirector()=>org.eclipse.persistence.descriptors.ClassDescriptor.getDefaultDeleteObjectQueryRedirector()
清楚地显示重定向器在“用户”对象的描述符中不为null,而在“用户配置文件”中为null。那么你认为我应该提交一个bug吗?谢谢
@Entity
@Table(name = "USER_PROFILE")
public class UserProfile extends User
{
    ...
}
@Entity
@Table(name = "USER_PROFILE")
@QueryRedirectors(delete = LogicDeleteInterceptor.class)
public class UserProfile extends User
{
    ...
}