Inheritance 命名查询(JPA)中布尔表达式中的编译错误

Inheritance 命名查询(JPA)中布尔表达式中的编译错误,inheritance,entity,jpa-2.0,jpql,named-query,Inheritance,Entity,Jpa 2.0,Jpql,Named Query,在我的项目中,我在eclipse Indigo中使用JPA2和Hibernate 我有一个抽象的BaseEntity类,它提供了项目中所有实体所需的一些字段。因此,该类由我在项目中使用的所有其他实体扩展。 BaseEntity中的一个字段是一个布尔字段deleted,该字段用于将条目标记为已删除(不允许从数据库中物理删除对象)。 现在,当我尝试在子类中设置命名查询并在WHERE子句中使用“NOT u.deleted”时,我从编译器中得到以下错误消息: 无法将状态字段路径“r.deleted”解析

在我的项目中,我在eclipse Indigo中使用JPA2和Hibernate 我有一个抽象的BaseEntity类,它提供了项目中所有实体所需的一些字段。因此,该类由我在项目中使用的所有其他实体扩展。
BaseEntity中的一个字段是一个布尔字段
deleted
,该字段用于将条目标记为已删除(不允许从数据库中物理删除对象)。 现在,当我尝试在子类中设置命名查询并在WHERE子句中使用“NOT u.deleted”时,我从编译器中得到以下错误消息:
无法将状态字段路径“r.deleted”解析为有效类型。

在BaseEntity的代码下方:

@MappedSuperclass
public abstract class BaseEntity {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  protected Long id;

  @Version
  protected int version;

  @Column(nullable = false, columnDefinition = "boolean default false")
  protected boolean deleted;

  public boolean isDeleted() {
      return deleted;
  }

  public boolean getDeleted() { // for test-purposes introduced both - isDeleted() & getDeleted()
      return deleted;
  }

  public void setDeleted(boolean deleted) {
      this.deleted = deleted;
  }

  // some other attributes, getters & setters

}
继承类的代码:

@Entity
@Table(name = "User")
@NamedQueries({
    @NamedQuery(name = "getAllUsers", query = "SELECT u FROM User u WHERE NOT u.deleted")
})
public class User extends BaseEntity {
    // some other fields and getter/setters
}
猜猜怎么回事


编辑:根据下面的注释更新代码。

我认为getter和setter很重要。我不确定命名选项,但应该是“
getIsDeleted()
”或“
isIsDeleted()
”方法

尝试将布尔值重命名为“
已删除”

更新: 不要使用“不”


实际上,您将表“用户””映射到类“角色””。因此,您的查询应该如下所示:

@NamedQuery(name=“getAllUsers”,query=“从角色中选择rr,其中未删除r”)


结果:返回已删除角色的列表=false

正确,getter中会丢失第二个“is”。但是,我将属性名称重命名为
deleted
,将getter/setter重命名为
isDeleted()
setDeleted(boolean deleted)
,但仍然得到了错误。顺便说一句,这两种方法在BaseEntity中都是公共的。我也试过了——也没用。只是为了“好玩”,还尝试在WHERE部分使用getter方法,比如
WHERE NOT r.isDeleted()
,但这不起作用。一个愚蠢的问题是:你从用户u中选择了select u,所以它必须是u.deleted,而不是r.deleted。您的查询中有一个简单的输入错误吗?对不起,我从另一个类复制粘贴到上面的注释,其中的查询是相同的,但另一个对象名-但变量u是正确的-只是上面注释中的一个输入错误。我尝试过:
where NOT u.isDeleted()
where NOT u.getDeleted()
,其中没有u.deleted
-但没有一个有效。抱歉,这是一个输入错误-表用户映射到类用户。然而,这似乎是eclipse中hibernate预处理器中的一个bug,因为我们可以用每个表/类中的每个布尔值重现该行为。。。
SELECT u FROM User u WHERE u.deleted = FALSE