時,我有以下兩類:休眠未綁定類型,沒有明確的目標實體使用通用
@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) {
...
}
}
當我試圖挽救DateTimeIsBetweenCriteria類的實例,我得到這個異常:
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
我需要clazz
在AbstractCriteria
的方法,以及T
可以是字符串,日期時間,布爾等
我THI但是如果我這樣做了,我仍然必須有另一列來確定要保存哪些條件,以便在從數據庫中加載條件時,我知道它是哪種類型的條件。我認爲這有點不好。
任何想法如何解決該異常而不改變我的設計?
我非常感謝你的時間。
謝謝您的回答。但是,您不能在數據庫中堅持Class。你可以將'clazz'列聲明爲varchar,並且hibernate支持保存Class。 – Budzu
我站好了;這不是我曾遇到過的 - 謝謝!答案的最後部分是否有用? – GrumpyWelshGit
但是,正如我上面提到的,我不必保存'clazz'。我需要使用'clazz'值進行一些計算。如果我不保存它(暫時),當hibernate加載標準時,'clazz'將會是空的。 – Budzu