Hibernate 泛型类型处理

问题描述 投票:0回答:1

我有一个实体类,它有一个通用类型字段。我希望保存该类并从数据库中读取该类。 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')

java hibernate jpa persistence
1个回答
0
投票

也许你可以尝试这样的事情:

@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;
    }

    //...
}
© www.soinside.com 2019 - 2024. All rights reserved.