JPA查询DTYPE

时间:2010-01-15 10:38:14

标签: hibernate jpa

我有一个表,它是从两个jpa实体(继承)生成的。因此,我们在数据库表中生成了一个DTYPE列,其实体名称具有值。

如何编写jpa查询以获取任何给定实体的数据。即DTYPE ='A'?

我刚尝试在jpa查询中使用DTYPE,但正如预期的那样,我收到错误“无法解析属性”。请让我知道如何编写此查询。

注意 - 我不想使用本机查询。

更新

我有A类和AA类,它们扩展了A. DTYPE有两个值A和AA。

当我查询A时,我得到所有A加AA实体。当我查询A时如何排除AA?

4 个答案:

答案 0 :(得分:4)

只需在父类中添加一个简单的字段dtype。

@Column(insertable = false,updatable = false) private String dtype;

因此,您可以在JPQL查询中使用它

答案 1 :(得分:2)

假设您有三个实体:

  • 派对(超类)
  • 人(延伸党)
  • 组织(延伸党)

其中最后两个是您使用鉴别器列存储的两个实体,您的JPA-QL查询应该如下所示:

select p from Person p

获得所有人。 JPA很聪明,可以搞清楚。同样,你可以这样做:

select p from Party p

并获得所有这些。

答案 2 :(得分:2)

您可以在JPA查询中使用实体名称,将鉴别器列抽象出来。

假设您有两个实体类SubClassASubClassB,它们都继承自SuperClass,那么您可以像这样查询这些实体:

FROM SubClassA WHERE [...]

FROM SubClassB WHERE [...]

如果要查询两个实体,请使用

FROM SuperClass WHERE [...]

答案 3 :(得分:1)

除了@SCH的帖子,并且因为没有直接为我工作,使用Oracle,我得到一个例外,说" dtype"是一种保留的关键字。然后我做了

@DiscriminatorColumn(name = "myDType")
class abstract AbstractClass{

@Column(insertable = false, updatable = false) 
private String myDType; 
[...]

这对我来说很好,因为这样我可以使用where条件动态更改我想要查询的类型,而不是更改FROM语句。