java - org.hibernate.InstantiationException:没有实体的默认构造函数:com.domaine.AnomalieAck
问题描述
我正在尝试将枚举值持久保存到数据库中,但触发了实例化异常,这是我的映射:
@Entity
public class Anomalie {
@Embedded
private AnomalieAck ack = AnomalieAck.NON_ACQUITTEE;
public Anomalie() {
}
/*getters and setters*/
}
//异常确认.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)
or的原因@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;
推荐阅读
- javascript - 我想通过javascript更改css背景网址
- r - ggplot2 中的图例标题
- python - 熊猫在dataFrame中找到两个连续的括号(同一行和不同行)
- mongodb - MongoDB count,min,max,avg 使用带有对象列表的字段进行聚合
- spring-boot - apache cxf 为 application/x-www-form-urlencoded 抛出“读取 XMLStreamReader 时出错”
- entity-framework-core - 添加父项或子项时 Blazor/EF 更新前端
- php - 未捕获的异常。使用 sql server 和基本映像 php:7.3-apache 在 docker 容器中找不到驱动程序
- mysql - 加入日历表并过滤某些用户时显示缺失的日期
- reactjs - 如何使用单个 useState 在 reactjs 中创建多个下拉列表
- python - 发送带有套接字的图像时出现“std::out_of_range”错误