根实体上的 JPA 注释 @DiscriminatorValue 没有 return 预期结果或 returns 所有记录
JPA annotation @DiscriminatorValue on root entity does not return expected results or returns all records
我有以下实体:
@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() 时,它 returns 我Animal 中的所有记录 table where DTYPE in ('Animal', 'Dog') 而不是 where DTYPE in('Animal')。我怎样才能让记录返回 where DYTPE = 'Animal' only?
Filter from Animal 表示 Animal 类型的实例。 Dog 类型的任何实例也是 Animal 类型的实例,并且也将被 selected。这工作正常。如果你以后有更多的 subclasses 和 select 来自 Animal,你将再次获得 all 个实例,包括subclasses.
如果您想排除 Dog 类型的实例,您应该在查询中明确。
我建议你改变你的模型,不要使用任何鉴别器作为基础 class。因此,您将避免这种不正确的期望:您团队中的任何开发人员都不会期望来自 Animal 的 selection 将 select 只是部分记录;大家就会明白,select会return所有个实体所有个子class个实体。仅对子 class 使用鉴别器值。
我有以下实体:
@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() 时,它 returns 我Animal 中的所有记录 table where DTYPE in ('Animal', 'Dog') 而不是 where DTYPE in('Animal')。我怎样才能让记录返回 where DYTPE = 'Animal' only?
Filter from Animal 表示 Animal 类型的实例。 Dog 类型的任何实例也是 Animal 类型的实例,并且也将被 selected。这工作正常。如果你以后有更多的 subclasses 和 select 来自 Animal,你将再次获得 all 个实例,包括subclasses.
如果您想排除 Dog 类型的实例,您应该在查询中明确。
我建议你改变你的模型,不要使用任何鉴别器作为基础 class。因此,您将避免这种不正确的期望:您团队中的任何开发人员都不会期望来自 Animal 的 selection 将 select 只是部分记录;大家就会明白,select会return所有个实体所有个子class个实体。仅对子 class 使用鉴别器值。