Java Hibernate/JPA:如何使用InheritanceType.JOINED查找子实体
给定一个由三个子实体扩展的超级实体,SubEntityA、SubEntityB和SubEntityC,是否可以对超级实体执行条件查询,以仅检索SubEntityB和SubEntityC的实例 使用InheritanceType.SINGLE_表,您可以设置一个鉴别器值,我认为它用于查询。如何使用InheritanceType.JOINED完成此操作 a)您也可以在连接的实体层次结构中包括(冗余的)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) 您可以使用
@DiscriminatorColumn
/@DiscriminatorValue
s
b) 您可以使用JPQLtype
操作符:,比如从SuperEntity se中选择se,其中type(se)SubEntityA
c) 使用多个查询(selectse FROM SubEntityB se
+selectse FROM SubEntityC se
)收集所有感兴趣的实体。a)您也可以将(冗余的)@DiscriminatorColumn
/@DiscriminatorValue
包含在联接实体层次结构中
b) 您可以使用JPQLtype
操作符:,比如从SuperEntity se中选择se,其中type(se)SubEntityA
c) 使用多个查询(selectse FROM SubEntityB se
+selectse FROM SubEntityC se
)收集所有感兴趣的实体。a)您也可以将(冗余的)@DiscriminatorColumn
/@DiscriminatorValue
包含在联接实体层次结构中
b) 您可以使用JPQLtype
操作符:,比如从SuperEntity se中选择se,其中type(se)SubEntityA
c) 使用多个查询(selectse FROM SubEntityB se
+selectse FROM SubEntityC se
)收集所有感兴趣的实体。a)您也可以将(冗余的)@DiscriminatorColumn
/@DiscriminatorValue
包含在联接实体层次结构中
b) 您可以使用JPQLtype
操作符:,比如从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来完成吗