首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何持久化枚举值而不是Ordinal

如何持久化枚举值而不是Ordinal
EN

Stack Overflow用户
提问于 2019-04-05 00:07:13
回答 1查看 494关注 0票数 0

我试图在数据库中持久化ack(Enum)的值,但是当它持久化时,它接受序数值而不是值本身。我可以做什么来保存值而不是Ordinal?以下是我的类:

转换器

代码语言:javascript
复制
@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;

    }

枚举:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
@Column(name = "ANO_ACK")
@Convert(converter = AnomalieAckConverter.class)
private AnomalieAck ack = AnomalieAck.NON_ACQUITTEE;

有没有办法让hibernate持久化数值而不是序数值?

EN

回答 1

Stack Overflow用户

发布于 2019-04-05 00:23:34

使用此转换器进行本地测试:

代码语言:javascript
复制
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);
        }
}

和此实体字段定义

代码语言:javascript
复制
    @Column(name = "ANO_ACK")
    @Convert(converter = AnomalieAckConverter.class)
    private AnomalieAck ack = AnomalieAck.ACQUITTEE_ERREUR;

则保持枚举中的ACK值而不是序数。您提供的代码示例是否为您重现了该问题?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55520553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档