我有一个实体类,它有一个通用类型字段。我希望保存该类并从数据库中读取该类。 Hibernate 不能只采用通用类型并保存/读取它,这就是它要求自定义
@Type
处理的原因。因此它期望一个 Class<? extends UserType<?>>
。我一直在努力思考如何正确地实施该课程。 (而且我不知道我想做的事情是否可能:D)有人知道如何处理这个问题吗?
实体:
@Entity
@Table(name = "my_table")
public class MyEntity<T extends Serializable> implements Serializable {
@Id
@Column(name = "id", length = 128)
private String id;
// @Type(MyEntityType.class)
@Column(name = "value")
private T value;
}
错误:
Property 'my.package.entity.MyEntity.value' has an unbound type and no explicit target entity (resolve this generics usage issue or set an explicit target attribute with '@OneToMany(target=)' or use an explicit '@Type')
也许你可以尝试这样的事情:
@Entity
@Table(name = "my_table")
public class MyEntity<T extends Serializable> implements Serializable {
@Id
@Column(name = "id", length = 128)
private String id;
@Type(type = "my.package.GeneralizedUserType")
@Column(name = "value")
private T value;
}
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.usertype.UserType;
import java.io.Serializable;
import java.sql.*;
public class GeneralizedUserType implements UserType {
@Override
public int[] sqlTypes() {
return new int[] {Types.JAVA_OBJECT};
}
@Override
public Class<Serializable> returnedClass() {
return Serializable.class;
}
//...
}