我有一个表,它是从两个jpa实体(继承)生成的。因此,我们在数据库表中生成了一个DTYPE列,其实体名称具有值。
如何编写jpa查询以获取任何给定实体的数据。即DTYPE ='A'?
我刚尝试在jpa查询中使用DTYPE,但正如预期的那样,我收到错误“无法解析属性”。请让我知道如何编写此查询。
注意 - 我不想使用本机查询。
更新
我有A类和AA类,它们扩展了A. DTYPE有两个值A和AA。
当我查询A时,我得到所有A加AA实体。当我查询A时如何排除AA?
答案 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查询中使用实体名称,将鉴别器列抽象出来。
假设您有两个实体类SubClassA
和SubClassB
,它们都继承自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语句。