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

时间:2012-05-15 06:47:52

标签: inheritance entity jpa-2.0 jpql named-query

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

在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
}

任何猜测可能出错的地方?

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

2 个答案:

答案 0 :(得分:0)

我认为吸气剂和制定者很重要。关于命名规范,我不确定,但应该是“getIsDeleted()”或“isIsDeleted()”方法。

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

<强>更新 不要使用 NOT

SELECT u FROM User u WHERE u.deleted = FALSE

有一个Tutorial about JPA

答案 1 :(得分:0)

实际上,您已将表格“用户”与“角色”进行了映射。所以你的查询应该是:

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

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