如何将枚举变量保存到数据库(而不是枚举值本身)

huangapple go评论78阅读模式
英文:

How to save enum variable to DB (instead enum value itself)

问题

我想知道是否可以将枚举变量和数据库进行映射。我想要将枚举的黄色数值(枚举变量)保存在数据库中。

如何将枚举变量保存到数据库(而不是枚举值本身)

这个枚举在以下类中使用:

@Getter
@Setter
@Table(name = "TIPOS_MOVIMIENTO")
@Entity
public class TipoMovimiento {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Column
    @Enumerated(EnumType.STRING)
    private TipoMov tipo;

    public String getTipo() {
        return tipo.getTipoNombre();
    }

    @OneToMany(mappedBy = "tipoMov")
    private List<Movimiento> movimientos;
}

我的DTO类:

@Getter
public class TipoMovimientoDto implements DtoEntity {
    private TipoMov tipo;
}

我尝试使用以下DTO:

@Convert(converter = TipoMovEnumConverter.class)
private TipoMov tipo;

但它不起作用。

英文:

I wonder if it's posible to map Enum VARIABLE and DB. I want to save in database the yellow values (variables of enum)

如何将枚举变量保存到数据库(而不是枚举值本身)

The enum is used in this class:

@Getter
@Setter
@Table(name = &quot;TIPOS_MOVIMIENTO&quot;)
@Entity

public class TipoMovimiento {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column
@Enumerated(EnumType.STRING)
private TipoMov tipo;

public String getTipo() {
    return tipo.getTipoNombre();
}

@OneToMany(mappedBy = &quot;tipoMov&quot;)
private List&lt;Movimiento&gt; movimientos;

My DTO class:

@Getter
public class TipoMovimientoDto implements DtoEntity {

private TipoMov tipo;

}

I've tried DTO with

@Convert(converter = TipoMovEnumConverter.class)
private TipoMov tipo;

But it doesn't works

答案1

得分: 5

写一个AttributeConverter来将枚举数据转换为其在数据库中存储的值。

@Converter(autoApply = true)
public class TipoMovConverter implements AttributeConverter<TipoMov, String> {

  @Override
  public Integer convertToDatabaseColumn(TipoMov attribute) {
    return attribute.getTipoNombre();
  }

  @Override
  public TipoMov convertToEntityAttribute(String value) {
    return value == null ? null : TipoMov.findByValue(value);
  }
}

注意:这里的findByValue是一个用于从值字符串获取枚举的静态方法。

英文:

Write an AttributeConverter for your enum which will convert your enum data into it's value when store in database.

@Converter(autoApply = true)
public class TipoMovConverter implements AttributeConverter&lt;TipoMov, String&gt; {

  @Override
  public Integer convertToDatabaseColumn(TipoMov attribute) {
    return attribute.getTipoNombre();
  }

  @Override
  public TipoMov convertToEntityAttribute(String value) {
    return value == null ? null : TipoMov.findByValue(value);
  }
}

Note: Here findByValue is a static method to get enum from value string

huangapple
  • 本文由 发表于 2020年8月4日 23:44:44
  • 转载请务必保留本文链接:https://go.coder-hub.com/63250437.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定