Java Hibernate/JPA:如何使用InheritanceType.JOINED查找子实体

Java Hibernate/JPA:如何使用InheritanceType.JOINED查找子实体,java,sql,database,hibernate,jpa,Java,Sql,Database,Hibernate,Jpa,给定一个由三个子实体扩展的超级实体,SubEntityA、SubEntityB和SubEntityC,是否可以对超级实体执行条件查询,以仅检索SubEntityB和SubEntityC的实例 使用InheritanceType.SINGLE_表,您可以设置一个鉴别器值,我认为它用于查询。如何使用InheritanceType.JOINED完成此操作 a)您也可以在连接的实体层次结构中包括(冗余的)@DiscriminatorColumn/@DiscriminatorValues b) 您可以使用

给定一个由三个子实体扩展的超级实体,SubEntityASubEntityBSubEntityC,是否可以对超级实体执行条件查询,以仅检索SubEntityBSubEntityC的实例

使用InheritanceType.SINGLE_表,您可以设置一个鉴别器值,我认为它用于查询。如何使用InheritanceType.JOINED完成此操作

a)您也可以在连接的实体层次结构中包括(冗余的)
@DiscriminatorColumn
/
@DiscriminatorValue
s

b) 您可以使用JPQL
type
操作符:,比如
从SuperEntity se中选择se,其中type(se)SubEntityA

c) 使用多个查询(
selectse FROM SubEntityB se
+
selectse FROM SubEntityC se
)收集所有感兴趣的实体。

a)您也可以将(冗余的)
@DiscriminatorColumn
/
@DiscriminatorValue
包含在联接实体层次结构中

b) 您可以使用JPQL
type
操作符:,比如
从SuperEntity se中选择se,其中type(se)SubEntityA

c) 使用多个查询(
selectse FROM SubEntityB se
+
selectse FROM SubEntityC se
)收集所有感兴趣的实体。

a)您也可以将(冗余的)
@DiscriminatorColumn
/
@DiscriminatorValue
包含在联接实体层次结构中

b) 您可以使用JPQL
type
操作符:,比如
从SuperEntity se中选择se,其中type(se)SubEntityA

c) 使用多个查询(
selectse FROM SubEntityB se
+
selectse FROM SubEntityC se
)收集所有感兴趣的实体。

a)您也可以将(冗余的)
@DiscriminatorColumn
/
@DiscriminatorValue
包含在联接实体层次结构中

b) 您可以使用JPQL
type
操作符:,比如
从SuperEntity se中选择se,其中type(se)SubEntityA


c) 使用多个查询(
SELECT se FROM SubEntityB se
+
SELECT se FROM SubEntityC se
)收集所有感兴趣的实体。

在a)您是指自己的字符串列吗?或者可以通过@DiscriminatorValue(value=“MyClass”)@DiscriminatorColumn和@DiscriminatorValue对
SINGLE_表
以及
联接
起作用。如果您愿意,您甚至可以在实体中使用只读字段“覆盖”鉴别器列,以获得干净的JPQL查询。为什么说“冗余”。如果你不定义它,就我所知,它不会被创造出来。我的桌子缺一张,这是多余的,因为你不必有一张;对于
JOINED
,Hibernate将在不使用鉴别器的情况下计算出实体的运行时类型,但是您可以声明一个鉴别器,Hibernate将创建一列并插入值,即使它本身没有使用它。它是冗余的,因为它包含的信息可以通过查看联接表中的其他数据来推断,这就是Hibernate acutally所做的。没错。如果没有鉴别器,则没有可查询类型的数据字段。对于纯JPQL,您可能需要使用
TYPE
运算符或显式查询特定实体
SELECT FROM SubEntityB
+
SELECT FROM SubEntityC
。在a)您是指自己的字符串列吗?或者可以通过@DiscriminatorValue(value=“MyClass”)@DiscriminatorColumn和@DiscriminatorValue对
SINGLE_表
以及
联接
起作用。如果您愿意,您甚至可以在实体中使用只读字段“覆盖”鉴别器列,以获得干净的JPQL查询。为什么说“冗余”。如果你不定义它,就我所知,它不会被创造出来。我的桌子缺一张,这是多余的,因为你不必有一张;对于
JOINED
,Hibernate将在不使用鉴别器的情况下计算出实体的运行时类型,但是您可以声明一个鉴别器,Hibernate将创建一列并插入值,即使它本身没有使用它。它是冗余的,因为它包含的信息可以通过查看联接表中的其他数据来推断,这就是Hibernate acutally所做的。没错。如果没有鉴别器,则没有可查询类型的数据字段。对于纯JPQL,您可能需要使用
TYPE
运算符或显式查询特定实体
SELECT FROM SubEntityB
+
SELECT FROM SubEntityC
。在a)您是指自己的字符串列吗?或者可以通过@DiscriminatorValue(value=“MyClass”)@DiscriminatorColumn和@DiscriminatorValue对
SINGLE_表
以及
联接
起作用。如果您愿意,您甚至可以在实体中使用只读字段“覆盖”鉴别器列,以获得干净的JPQL查询。为什么说“冗余”。如果你不定义它,就我所知,它不会被创造出来。我的桌子缺一张,这是多余的,因为你不必有一张;对于
JOINED
,Hibernate将在不使用鉴别器的情况下计算出实体的运行时类型,但是您可以声明一个鉴别器,Hibernate将创建一列并插入值,即使它本身没有使用它。它是冗余的,因为它包含的信息可以通过查看联接表中的其他数据来推断,这就是Hibernate acutally所做的。没错。如果没有鉴别器,则没有可查询类型的数据字段。对于纯JPQL,您可能需要使用
TYPE
运算符或显式查询特定实体
SELECT FROM SubEntityB
+
SELECT FROM SubEntityC
。在a)您是指自己的字符串列吗?或者可以通过@DiscriminatorValue(value=“MyClass”)@DiscriminatorColu来完成吗