Как сохранить переменную enum в БД (вместо самого значения enum) - PullRequest
0 голосов
/ 04 августа 2020

Интересно, возможно ли сопоставить Enum VARIABLE и DB. Я хочу сохранить в базе данных желтые значения (переменные перечисления)

Переменная перечисления

Перечисление используется в этом классе:

@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;

Но не работает

Ответы [ 2 ]

3 голосов
/ 04 августа 2020

Напишите 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 - это метод c stati для получения перечисления из строки значения

0 голосов
/ 04 августа 2020

0

Понятно !!! Я никогда не думал, что это сработает.

@Getter
public class TipoMovimientoDto implements DtoEntity {

private TipoMov tipo;

}

Я только что изменил код выше (Dto):

private TipoMov tipo;

на

private String tipo;

Я не могу объяснить, как Enum из Entity можно было преобразовать в DTO, используя String вместо Enum ... Но это сработало!

Если у вас такая же проблема. .. вам нужно использовать Attribute Converter (вы можете увидеть это в ответе @User - Upvote не говорите "Спасибо")

Все еще необходимо использовать его в классе Entity выше переменной enum:

@ Convert (converter = TipoMovEnumConverter.class) Но не обязательно в DTO. Просто используйте String вместо Enum в DTO!

...