私のプロジェクトでは、EclipseIndigo内でJPA2とHibernateを使用しています。
プロジェクト内のすべてのエンティティに必要ないくつかのフィールドを提供する抽象BaseEntityクラスがあります。したがって、このクラスは、プロジェクトで使用する他のすべてのエンティティによって拡張されます。
BaseEntityのフィールドの1つはブールフィールドdeleted
です。これは、エントリを削除済みとしてマークするために必要です(データベースからオブジェクトを物理的に削除することは許可されていません)。サブクラスに名前付きクエリを設定し、WHERE句で「NOTu.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
}
何が間違っているのか推測できますか?
編集:以下のコメントに従ってコードを更新しました。