【发布时间】:2017-12-19 21:53:09
【问题描述】:
我有以下两个类:
@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
AbstractCriteria 中的方法我需要clazz,T 可以是 String、DateTime、Boolean 等。
我正在考虑制作clazz@Transient,但如果我这样做了,我仍然需要有另一列来确定要保存哪些标准,以便在从数据库中加载回标准时,我知道哪种标准是。我认为这有点 hacky。
有什么想法可以在不更改设计的情况下解决该异常吗?
非常感谢您的宝贵时间。
【问题讨论】:
标签: java sql hibernate jpa hibernate-mapping