dave08
04/15/2024, 2:21 PMclass KomapperBaseRepository<ENTITY : Any, ID : Any, META : EntityMetamodel<ENTITY, ID, META>>(
private val db: R2dbcDatabase,
private val entityMetamodel: META,
) : RepositoryBase<ENTITY, ID> {
override suspend fun create(entity: ENTITY): ENTITY = db.runQuery(QueryDsl.insert(entityMetamodel).single(entity))
override suspend fun get(id: ID): ENTITY? {
return db.runQuery(QueryDsl.from(entityMetamodel).where { entityMetamodel...? eq id }.singleOrNull())
}
}
// on my domain layer:
interface RepositoryBase<T : Any, ID : Any> {
suspend fun create(entity: T): T
suspend fun get(id: ID): T?
}
but I can't find what to put in my where as the id property...dave08
04/15/2024, 2:25 PMclass KomapperBaseRepository<ENTITY : Any, ID : Any, META : EntityMetamodel<ENTITY, ID, META>>(
private val db: R2dbcDatabase,
private val entityMetamodel: META,
private val idProperty: PropertyMetamodel<ENTITY, ID, *>
) : RepositoryBase<ENTITY, ID> {
override suspend fun create(entity: ENTITY): ENTITY = db.runQuery(QueryDsl.insert(entityMetamodel).single(entity))
override suspend fun get(id: ID): ENTITY? {
return db.runQuery(QueryDsl.from(entityMetamodel).where {idProperty eq id }.singleOrNull())
}
}
but maybe there's another way?Toshihiro Nakamura
04/16/2024, 12:16 PMdave08
04/16/2024, 12:23 PMdave08
04/16/2024, 12:24 PMToshihiro Nakamura
04/16/2024, 12:51 PMSo my implementation where I pass the idProperty is still ok?Yes, It works fine if you don’t use composite keys.