java - 如何持久化枚举值而不是序数
问题描述
我正在尝试将 ack(Enum) 的值持久保存在数据库中,但是当它持久保存时,它采用序数值而不是值本身。我可以做些什么来保存值而不是序数?这是我的课:
转换器
@Convert
public class AnomalieAckConverter implements AttributeConverter<AnomalieAck, Integer> {
/**
* @param attribute
* @return
* @see javax.persistence.AttributeConverter#convertToDatabaseColumn(java.lang.Object)
*/
@Override
public Integer convertToDatabaseColumn(AnomalieAck anoAck) {
// TODO Auto-generated method stub
// return anoAck.getValue();
return null;
}
/**
* @param dbData
* @return
* @see javax.persistence.AttributeConverter#convertToEntityAttribute(java.lang.Object)
*/
@Override
public AnomalieAck convertToEntityAttribute(Integer ack) {
// TODO Auto-generated method stub
// return AnomalieAck.getByValue(ack);
return null;
}
枚举:
public enum AnomalieAck {
NON_ACQUITTEE(0),
ACQUITTEE_APP1 (1),
ACQUITTEE_APP2(2),
/** Aacquittee en erreur. */
ACQUITTEE_ERREUR(10),
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;
}
public static AnomalieAck getByValue(int ackNumero) {
for (final AnomalieAck ackitement : AnomalieAck.values()) {
if (ackitement.getValue() == ackNumero) {
return ackitement;
}
}
Java类:
@Column(name = "ANO_ACK")
@Convert(converter = AnomalieAckConverter.class)
private AnomalieAck ack = AnomalieAck.NON_ACQUITTEE;
有没有办法让休眠保持值而不是序数值?
解决方案
使用此转换器进行本地测试:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter
public class AnomalieAckConverter implements AttributeConverter<AnomalieAck, Integer>
{
@Override
public Integer convertToDatabaseColumn(final AnomalieAck attribute)
{
return attribute.getValue();
}
@Override
public AnomalieAck convertToEntityAttribute(final Integer dbData)
{
return AnomalieAck.getByValue(dbData);
}
}
和这个实体字段定义
@Column(name = "ANO_ACK")
@Convert(converter = AnomalieAckConverter.class)
private AnomalieAck ack = AnomalieAck.ACQUITTEE_ERREUR;
然后枚举中的 ack 值被持久化而不是序数。您提供的代码示例是否为您重现了该问题?
推荐阅读
- angular - 构建生产模式时,location.hostname 以角度返回 null 或 [Object%20object]
- woocommerce - 为 Woocommerce 中的每个订单生成唯一的二维码
- c# - 如何创建平台生成器?
- .net - 如何在.NET中传递包含带有`+`和`//`字符的值的全部(*)url参数
- r - 在数据框中,使用 R 中的向量创建名称列
- android - 设计选项卡未显示布局预览,“缺少课程”
- java - 根据单词拆分ArrayList
- azure - Azure BlobStorage 类型帐户与 StorageV2 帐户有何不同?
- git - 如何将 git 子模块与 Bitbucket 管道一起使用?
- angular - 错误添加 Angular Bootstrap 后找不到模块 rxjs/operators --