Hibernate扩展实体 - 对象不是指定的子类--Java

时间:2018-04-19 19:34:18

标签: java spring postgresql hibernate

我想构建可以是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

0 个答案:

没有答案