java - org.hibernate.InstantiationException : No default constructor for entity: com. 域.AnomalieAck

标签 java hibernate enums hibernate-mapping instantiation

我试图将枚举值保存到数据库中,但触发了实例化异常,这是我的映射:

@Entity
public class Anomalie {

    @Embedded
    private AnomalieAck ack = AnomalieAck.NON_ACQUITTEE;



    public Anomalie() {
    }
/*getters and setters*/
}

//AnomalieAck.java

public enum AnomalieAck {

    NON_ACQUITTEE(0),

    ACQUITTEE_APP1 (1),

    ACQUITTEE_APP2(2),

    /** Aacquittee en erreur. */
    ACQUITTEE_ERREUR(10),

    @Column(name = "ANO_ACK")
    private int ack = 0;

  private AnomalieAck() {

    }

  private AnomalieAck(final int value) {
    this.ack = value;
   }
  public int getValue() {
        return this.ack;
    }
  public void setAck(int ack) {
        this.ack = ack;
    }
}

我没有使用@Enumerated(EnumType.STRING)@Enumerated(EnumType.ORDINAL)的原因是数据库中的字段ANO_ACK 被声明为数字,并且有许多其他资源使用该值作为数字。

我已经检查了所有内容:无参数构造函数已定义,setter 方法已实现。

我该怎么做才能让 Hibernate 实例化这个类?

最佳答案

不要嵌入枚举。

您需要的是一个自定义转换器:

转换器:

@Converter
public class AnomalieAckConverter implements AttributeConverter<AnomalieAck , Integer> {

 @Override
 public String convertToDatabaseColumn(AnomalieAck  anomalieAck ) {
   return anomalieAck.getValue();
 }

 @Override
 public AnomalieAck convertToEntityAttribute(Integer ack) {
    retrun AnomalieAck.getByValue(ack);
 }

}

实体:

@Column
@Convert(converter = AnomalieAckConverter.class)
private AnomalieAck ack;

关于java - org.hibernate.InstantiationException : No default constructor for entity: com. 域.AnomalieAck,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512295/

相关文章:

Java——从数组中删除重复元素时出错

java - 我可以在JButton上写一个字符串字符吗?

java - 在 Thymeleaf 和 Spring 4 中,DispatcherServlet 中未找到带有 URI 的 HTTP 请求的映射

java - 关于 Spring @Autowired 和 Spring JDBC 的问题

mysql - key '1' 的重复条目 'UK_tbce3olw19taxx6srova86xok'

java - ejdb Java 绑定(bind)不起作用 "no jejdb in java.library.path"

java - hibernate 中的 hbm 文件

java - 每个枚举项的编号?

C++ 将枚举作为参数传递

java - 通过通用方法访问 Java 中的各种枚举