2014-10-29 60 views
0

你能给出它由三个子实体扩展SubEntityA一个SuperEntity,SubEntityBSubEntityC寻子实体,在SuperEntity进行条件查询只检索SubEntityBSubEntityC休眠/ JPA:如何使用InheritanceType.JOINED

With InheritanceType.SINGLE_TABLE您可以设置我相信用于查询的鉴别器值。它如何完成InheritanceType.JOINED?

回答

2

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

b)你可以使用JPQL type操作:http://en.wikibooks.org/wiki/Java_Persistence/JPQL#JPQL_special_operators,像SELECT se FROM SuperEntity se WHERE TYPE(se) <> SubEntityA

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

+0

在a)你的意思是一个自己的字符串列?或者可以通过@DiscriminatorValue(value =“MyClass”)来完成 – momomo 2014-10-29 14:08:11

+1

@DiscriminatorColumn和@DiscriminatorValue可以用于'SINGLE_TABLE'和'JOINED'。如果你愿意,你甚至可以用实体中的只读字段'重写'鉴别器列,以便能够获得干净的JPQL查询。 – JimmyB 2014-10-29 14:14:34

+0

你为什么说“多余”?如果你没有定义它,它不会被创建,据我所知。我的桌子没有一个。 – momomo 2014-10-29 14:36:04