<@U0C1NM397>: Here's a variant that works by defin...
# exposed
a
@mbickel: Here's a variant that works by defining a NaturalKey interface:
Copy code
interface NaturalKey<T: Any> {
    val naturalKey: Set<Column<T, *>>
}

fun <T: Any, ID : Any, DAO: AbstractDao<T, ID>> DAO.findOrStore(value: T): T where DAO : NaturalKey<T> {
    if (id(value) == defaultId) {
        return findByExample(value, naturalKey).singleOrNull() ?: insert(value, defaultIdStrategy)
    }
    return value
}