是否可以使用Hibernate嵌入泛型字段?
我尝试以下列方式执行此操作:
@Entity
public class Element<T> {
@Embedded
private T value;
...
但我有:
org.hibernate.AnnotationException:
Property value has an unbound type and no explicit target entity.
我知道value
的目标类型是SpecificValue
类型。但是如何指定呢?
答案 0 :(得分:2)
由于Type Erasure,Hibernate无法保留通用字段。
但是,我设法找到了一个简单的解决方法:
将@Access(AccessType.FIELD)
注释添加到课程中。
将@Transient
注释添加到要保留的字段中。
创建一个使用此字段的特定 getter和setter。
将@Access(AccessType.PROPERTY)
添加到getter。
通过向类添加@Embeddable
属性,使字段的类型可嵌入。
通过这种方式,您将能够拥有特定类型的嵌入属性。
以下是修改后的代码:
@Entity
@Access(AccessType.FIELD)
public class Element<T> {
@Transient
private T value;
@Access(AccessType.PROPERTY)
private SpecificValue getValue() {
return (SpecificValue) value;
}
private void setValue(SpecificValue v) {
this.value = (T) v;
}
...
@Embeddable
public class SpecificValue {
...