我想构建可以是String,Boolean或Long的字段。在这种情况下,我尝试使用泛型类型和inheratiance。所有代码都正确编译,但是当我想从数据库中获取一些参数时,我得到了一个错误:
Object [id = 1]不是指定的子类 [unity.app.domain.Parameter]:判别器:1",
如果我想使用post方法向DB添加参数,我还有更多错误:
"类型定义错误:[简单类型,类 unity.app.domain.Parameter];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException:不能 构造
unity.app.domain.Parameter
的实例(没有创造者,像 默认构造,存在):抽象类型需要映射到 具体类型,具有自定义反序列化器或包含其他类型 信息\ n在[来源:(PushbackInputStream); line:1,column:1]",
如何解决此问题?
@Data
@Entity
@Table(name = "parameter")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "parameter", discriminatorType = DiscriminatorType.STRING)
public abstract class Parameter<T> {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "id", nullable = false)
private Long id;
@Column(name = "code")
private String code;
private T value;
@Transient
public abstract T getValue();
public abstract void setValue(T value);
}
@Entity
@DiscriminatorValue(value = "boolean")
public class BooleanValue extends Parameter<Boolean> {
@Column(name = "bool_value")
private Boolean booleanValue;
getValue()/setValue()[...]
}
@Entity
@DiscriminatorValue(value = "long")
public class LongValue extends Parameter<Long> {}
@Entity
@DiscriminatorValue(value = "string")
public class StringValue extends Parameter<String> {}
我正在使用postgresql,这是我的表&#34;参数&#34;:
id BIGINT,
code VARCHAR,
name VARCHAR,
description VARCHAR,
bool_value BOOLEAN,
string_value VARCHAR,
long_value BIGINT