在我的项目中,我在日食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
}
任何猜测可能出错的地方?
编辑:根据以下评论更新代码。
答案 0 :(得分:0)
我认为吸气剂和制定者很重要。关于命名规范,我不确定,但应该是“getIsDeleted()
”或“isIsDeleted()
”方法。
尝试将布尔值重命名为“deleted
”
<强>更新强> 不要使用 NOT
SELECT u FROM User u WHERE u.deleted = FALSE
答案 1 :(得分:0)
实际上,您已将表格“用户”与“角色”进行了映射。所以你的查询应该是:
@NamedQuery(name =“getAllUsers”,query =“SELECT r FROM Role r WHERE NOT r.deleted”)
结果:已删除的角色的返回列表= false