- Как сопоставить выбранный запрос с классом
Есть ли аннотация @transactional для выполнения запроса?
object UserRepository { fun getAll() : List<User> { return User.selectAll().map { User } // how to add it in a transaction ? // Is it the right way to map query to a Class ? } fun get(id: Int) : User? { return User.select { User.id eq id id}.map { User.it } // Mapping Not working }
Kotlin предоставил сопоставление запросов DSL
comment
Я советую вам начать с чтения этого сообщения в блоге spring.io/blog/2016/03/20/
- person Tapac   schedule 15.05.2018
Ответы (2)
Картирование должно выполняться автоматически. См. Документацию:
Стол:
object Users : IntIdTable() {
val name = varchar("name", 50)
}
Сущность:
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var name by Users.name
}
Использование:
fun getAllUsers(): List<User> {
Database.connect(/* ... */)
return transaction {
User.all().toList()
}
}
person
zoku
schedule
28.05.2018
У меня это не работает. Он говорит, что определение типа не удалось. Ожидаемое несоответствие типа: требуется: Список ‹User› найдено: Список ‹ResultRow›
- person Oxymoron; 02.07.2019
Ничего. Я делал
Users.all()
, а не User.all()
- person Oxymoron; 02.07.2019
Я знаю, что уже поздно, но для других людей, у которых есть этот вопрос: если вы используете DSL, вы можете создать функцию в своем классе данных для целей сопоставления. Например :
data class User(
val id: Int,
val username: String,
val password: String
) {
companion object {
fun fromRow(resultRow: ResultRow) = User(
id = resultRow[UserTable.id].value,
username= resultRow[UserTable.username],
password = resultRow[UserTable.password]
)
}
}
и в вашем блоке транзакции:
transaction {
user = UserTable.select { UserTable.id eq userId }.map { User.fromRow(it) }
}
person
Ali Zarei
schedule
30.11.2020