0

在我的项目中,我在 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
}

任何猜测可能是什么问题?

编辑:根据下面的评论更新代码。

4

2 回答 2

0

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

尝试将您的布尔值重命名为“ deleted

更新: 不要使用NOT

SELECT u FROM User u WHERE u.deleted = FALSE

有一个关于 JPA 的教程

于 2012-05-15T06:55:00.347 回答
0

实际上,您将表“用户”与“角色”类映射。所以你的查询应该是这样的:

@NamedQuery(name = "getAllUsers", query = "SELECT r FROM Role r WHERE NOT r.deleted")

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

于 2012-07-26T14:20:48.497 回答