12 Aralık 2019 Perşembe

JPA AttributeConverter Arayüzü

Giriş
Kendi yazdığımı sınıfı JPA'ya tanıtmak @Converter anotasyonu kullanılır.

convertToDatabaseColumn metodu
Örnek - enum
AccountRole isimli bir enumeration bu enum'a ait getText(), fromText() metodları olsun. Şöyle yaparız.
@Converter(autoApply = true)
public class AccountRoleConverter implements AttributeConverter<AccountRole, String> {

  @Override
  public String convertToDatabaseColumn(AccountRole role) {
    return role.getText();
  }

  @Override
  public AccountRole convertToEntityAttribute(String dbData) {
    return AccountRole.fromText(dbData);
  }
}
Örnek - javax.time.LocalDate ve java.util.Data arasında çevrim yapar
LocalDate için şöyle yaparız.
import java.time.LocalDate;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter
public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate,
  java.sql.Date> {

  @Override
  public java.sql.Date convertToDatabaseColumn(LocalDate entityValue) {
    if (entityValue != null) {
      return java.sql.Date.valueOf(entityValue);
    }
    return null;
  }

  @Override
  public LocalDate convertToEntityAttribute(java.sql.Date databaseValue) {
    if (databaseValue != null) {
      return databaseValue.toLocalDate();
    }
    return null;
  }
}
Örnek - LocalDateTime
LocalDateTime için şöyle yaparız.
import java.time.LocalDateTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;

@Converter
public class LocalDateTimePersistenceConverter implements
  AttributeConverter<LocalDateTime, java.sql.Timestamp> {

  @Override
  public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue) {
    if (entityValue != null) {
      return java.sql.Timestamp.valueOf(entityValue);
    }
    return null;
  }

  @Override
  public LocalDateTime convertToEntityAttribute(java.sql.Timestamp databaseValue) {
    if (databaseValue != null) {
      return databaseValue.toLocalDateTime();
    }
    return null;
  }
}

Hiç yorum yok:

Yorum Gönder