Probléma
Sajnos előfordulhat, hogy egy régebbi rendszernél boolean helyett string van használva. Ezeket vagy kézzel minden alkalommal konvertáljuk egy extension function-nel, pl.:
fun String?.toBoolean(): Boolean = this?.equals("i", true) ?: false
fun Boolean?.toOracleString(): String = this?.let { if (it) "I" else "N" } ?: "N"
Vagy: egy Attribute Convertert kell írni, ami elvégzi helyettünk.
https://thorben-janssen.com/jpa-attribute-converter/
import jakarta.persistence.AttributeConverter
import jakarta.persistence.Converter
@Converter(autoApply = true)
class BooleanConverter : AttributeConverter<Boolean, String?> {
override fun convertToDatabaseColumn(attribute: Boolean): String = attribute.toOracleString()
override fun convertToEntityAttribute(dbData: String?): Boolean = dbData.toBoolean()
}
Ha beállítjuk az autoApply-t akkor automatikusan használható, különben kell a @Convert
annotáció.
@Convert(converter = BooleanConverter::class)
val valid: Boolean,
Ez csak a JPA-s műveleteknél használható, tehát pl. oracle eljárás hívásnál nem fog automata konverziót végezni.