21 Temmuz 2023 Cuma

JPA @Converter Anotasyonu - Custom Conversion

Giriş
Şu satırı dahil ederiz.
import javax.persistence.Converter;
Kendi yazdığım AttributeConverter arayüzünden kalıtan sınıfı JPA'ya tanıtmak içindir.

autoApply Alanı False İse
İlgili alan üzerinde kullanmak gerekir. Şöyle yaparız
@Converter(converter=LocalDateTimePersitenceConverter.class)
autoApply Alanı True İse
Eğer her alana otomatik uygunlansın istersek şöyle yaparız.
@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> {

  @Override
  public Date convertToDatabaseColumn(LocalDate locDate) {
    return (locDate == null ? null : Date.valueOf(locDate));
  }

  @Override
  public LocalDate convertToEntityAttribute(Date sqlDate) {
    return (sqlDate == null ? null : sqlDate.toLocalDate());
  }
}
Örnek
Elimizde şöyle bir Enum olsun
public enum Status {
  ACTIVATED(1), DEACTIVATED(2), SUSPENDED(3);

  int statusId;

  private Status(int statusId) {
    this.statusId = statusId;
  }

  public int getStatusId() {
    return statusId;
  }
};
Şöyle yaparız
@Converter
public class CustomerStatusConverter implements 
  AttributeConverter<Status, Integer> {
  @Override
  public Integer convertToDatabaseColumn(Status status) { 
    return status.getStatusId();
  }

  @Override
  public Customer.Status convertToEntityAttribute(Integer statusId) {
    return Arrays.stream(Status.values())
      .filter(s -> s.getStatusId() == statusId)
      .findFirst()
      .orElseThrow(IllegalArgumentException::new);
  }
}

@Entity
public class Customer {
  @Convert(converter = CustomerStatusConverter.class)
  private Status status;
  ...
}


Hiç yorum yok:

Yorum Gönder

Bean Validation @GroupSequence Anotasyonu

Örnek Elimizde şöyle bir kod olsun public class SampleRequest {   @NotNull   LocalDate startDate;   @NotNull   LocalDate endDate;   @AssertT...