gpt4 book ai didi

java - 根实体上的 JPA 注释 @DiscriminatorValue 不返回预期结果或返回所有记录

转载 作者:太空宇宙 更新时间:2023-11-04 09:11:35 25 4
gpt4 key购买 nike

我有以下实体:

@Table(name="Animal")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorValue("Animal")
public class Animal{
// code brevity
}

@Entity
@Discriminatorvalue("Dog")
public class Dog extends Animal{
// code brevity
}

因此,当我运行 jpa 查询 entityManager.createQuery("from Animal").getResultList() 时,它会返回 Animal 表 where DTYPE in ('Animal', 'Dog') 中的所有记录,而不是 where DTYPE in('Animal')。如何获取仅限 DYTPE = 'Animal' 返回的记录?

最佳答案

从动物中过滤表示动物类型的实例。 Dog 类型的任何实例也是 Animal 类型的实例,并且也将被选择。这工作正确。如果您稍后有更多子类并选择from Animal,您将再次获得所有实例,包括子类。

如果您想排除 Dog 类型的实例,您应该在查询中显式执行此操作。

我建议您更改模型并且不要对基类使用任何鉴别器。因此,您将避免这种不正确的期望:您团队中的开发人员不会期望从 Animal 中进行的选择将仅选择部分记录;每个人都会明白 select 将返回所有子类的所有实体。仅对子类使用鉴别器值。

关于java - 根实体上的 JPA 注释 @DiscriminatorValue 不返回预期结果或返回所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59606499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com