Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез
хотя да, тот кто сделал правку должен был бы и маппинг поправить (если мы говорим о кастомном, как в моем случае FilmFields, наборе филдов)
Читать полностью…как только ты это в миграции поменял, ты автоматом поменяешь в конвертации поля
+ тесты
твой сценарий возможен либо в командах с низкой инженерной культурой, либо там, где не ты хозяин бд
ослабляет. код считает что по дефолту все nullable, мы точечно правим и зашиваем в код. какое-то поле меняется на not nullable, генеренный код не меняется, наш ручной маппинг тоже...
Читать полностью…но ведь не ослабляет, мы просто фиксим баг ленивца эдера
Читать полностью…меня только одно расстраивает в таком подходе, как и любом другом для обхода бага - оно ослабляет compile time проверки по сути
Читать полностью…А нельзя unchecked cast в одном месте, чтобы не писать кучу бойлер-плейта?
Читать полностью…+ дсл в имплементации репозитория связывает твой дата класс и структуру в бд, пропустить не выйдет
Читать полностью…а если структура в ~базе~ таблице поменялась, то это не скажется же если не апдейтить дата класс?
какие то чудеса и рождественская магия между 22.0.5 и 25.0.5
Читать полностью…шайтанства нет, мой дата-класс 1 в 1 повторяет структуру, что в бд
просто обхожу баг Эдера
override fun findByKeycloakId(keycloakId: String): User? {Читать полностью…
return db.select(
USERS.ID.convertFrom { it!! },
USERS.KEYCLOAK_ID.convertFrom { it!! },
USERS.EMAIL.convertFrom { it!! },
USERS.USERNAME.convertFrom { it!! },
USERS.FIRST_NAME,
USERS.LAST_NAME,
USERS.CREATED_AT.convertFrom { it!! },
USERS.UPDATED_AT
).from(USERS)
.where(USERS.KEYCLOAK_ID.eq(keycloakId))
.fetchOne(Records.mapping(::User))
}
ну кто-то слил свою правку, ты писал новый код к этому полю и ребейзнулся.
тут только тесты и культура ревью
сборка будет зеленой. а если тестов на это место нет - поймаем только в рантайм
Читать полностью…который закрывает ишью на гитхабе, а у народа наллабл в кодгене
Читать полностью…как и маппер с рефлексией, там вообще неявно это делается
Читать полностью…ну вот свой маппер написать, я уже об этом говорил как раз
Читать полностью…object FilmFields {Читать полностью…
val ID = FILM.ID.nonNullable()
val NAME = FILM.NAME.nonNullable()
val LINK = FILM.LINK
val POSTER_LINK = FILM.POSTER_LINK
val STATE = FILM.STATE.nonNullable()
}
inline fun <T> Field<T>.nonNullable() = convertFrom { it!! }
собственно, это единственная задача жука, я бы и просто на строках все писал, если бы тайпсэйф был возможен
Читать полностью…упадет компиляция и тесты, править все придется в любом случае
Читать полностью…да даже неохота подсвечивать. утро вечера мудренее. порешаю завтра
Читать полностью…кстати... можно сделать свой объект со своим набором маппинга, где нужные филды уже будут конвертированы)
Читать полностью…но благодаря .convertFrom { it!! } это инлайном можно конвертнуть
Читать полностью…