3

我有这两个实现单表继承策略的类:

@Entity
@Table(name = "tableA")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
@DiscriminatorValue("A")
class A {
    ...
}

@Entity
@DiscriminatorColumn(name = "type")
@DiscriminatorValue("B")
class B extends A {
    ...
}

当我创建一个查询来获取所有 A 实体时,它也会给我带来 B 实体。如何仅获取 A 类型的实体?

4

1 回答 1

2

您可以创建一个通用的抽象基类并使 A 和 B 都扩展基类,例如:

@Entity
@Table(name = "tableA")
@DiscriminatorColumn(name="`type`")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
abstract class Base {
    ...
}

@Entity
@DiscriminatorColumn(name = "type")
@DiscriminatorValue("A")
class A extends Base {
    ...
}

@Entity
@DiscriminatorColumn(name = "type")
@DiscriminatorValue("B")
class B extends Base {
    ...
}

(请注意,SINGLE_TABLE 是默认策略,因此可以省略注释参数)。

或者如果支持 JPA2,您可以使用:

SELECT a FROM A a WHERE TYPE(a) = A
于 2013-01-09T13:44:24.477 回答