如果继承类型为 SingleTable,则 EclipseLink 在子类查询中使用不正确的表名



我有三个使用 JPA/EclipseLink 的实体:

@Entity(name = "Sharing")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class AbstractSharingEntity extends AbstractEntity {
@Entity(name = "InternalSharing")
public class InternalSharingEntity extends AbstractSharingEntity {
@Entity(name = "ExternalSharing")
public class ExternalSharingEntity extends AbstractSharingEntity {

如果我为抽象共享实体创建一个类型化查询("...从共享..."(,EclipseLink 使用指定的实体名称创建正确的查询。

但是,如果我为两个子类之一创建一个类型化查询(例如"...FROM InternalSharing ..."(,EclipseLink 使用类名作为表名而不是使用实体名创建错误的查询。这会导致以下错误:

java.sql.SQLSyntaxErrorException: Table 'db.ABSTRACTSHARINGENTITY' doesn't exist

我是否犯了任何错误,这是预期的行为?如何在不更改类名/删除不同实体名的情况下为子类创建有效的查询?

我直言,您的期望是正确的。未指定表名时,默认表名为">entityName",并且由于您覆盖了"Abstract"类的实体名称,因此应SHARING使用的表。既然它有继承,那么也应该把它用于子类。

所有这些查询都应生成表单的查询

"SELECT ... FROM SHARING ..."

在您的 JPA 提供程序上引发一个错误。

注意:这假定AbstractEntity不是 JPA 实体。

当然,您需要在该模型上有一个鉴别器,并且您的"抽象"类可能应该abstract

最新更新