英文:
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 = "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;
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<TipoMov, String> {
@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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论