を使用して、私は、次の2つのクラスしている:私はDateTimeIsBetweenCriteriaクラスのインスタンスを保存しようとしたとき、私はこの例外をHibernateは結合していないタイプと明示的なターゲットエンティティジェネリック
@Entity
@Table(name = "criteria")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = AbstractCriteria.TYPE, discriminatorType = DiscriminatorType.STRING)
public abstract class AbstractCriteria<T> implements Serializable {
public static final String TYPE = "type";
...
@Column(name = "clazz") private Class<T> clazz;
...
protected AbstractCriteria(Class<T> clazz) {
this.clazz = Preconditions.checkNotNull(clazz);
}
...
public abstract Predicate<T> evaluate(T value);
}
@Entity
@DiscriminatorValue(CriteriaType.Values.DATETIME_IS_BETWEEN)
public class DateTimeIsBetweenCriteria extends AbstractCriteria<DateTime> {
...
public DateTimeIsBetweenCriteria() {
super(DateTime.class);
}
...
@Override
public Predicate<DateTime> evaluate(DateTime value) {
...
}
}
ました:
Exception in thread "main" org.hibernate.AnnotationException:
Property ...AbstractCriteria.clazz has an unbound type and no explicit target entity.
Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type
私はTHIだった私はAbstractCriteria
にメソッドのclazz
を必要とし、T
等の文字列、DateTimeの、ブール、
することができclazz
@Transient
を作成していますが、私はそれでも、データベースから基準を読み込むときに、どの基準を使用しているかを知るために、保存する基準を特定する別の列が必要です。私はこれがちょっとハッキリだと思う。
私のデザインを変更することなくその例外を解決する方法はありますか?
多くのことに感謝します。
感謝を。しかし、データベースにクラスを保持できないのは間違いです。 'clazz'カラムをvarcharとして宣言し、hibernateがクラスを保存することをサポートすることができます。 – Budzu
私は修正されました。これは私が遭遇したことではありません - ありがとう!答えの最後の部分は有用ですか? – GrumpyWelshGit
私は上記のように 'clazz'を保存する必要はありません。いくつかの計算に 'clazz'値を使う必要があります。私がそれを保存しない(一時的にする)と、休止状態で基準を読み込むと、 'clazz'がnullになります。 – Budzu