Я использую scala и slick здесь, и у меня есть baserepository, который отвечает за выполнение основной crud моих классов. Для конструктивного решения у нас есть обновленные периоды времени и времени, которые обрабатываются приложением, а не триггерами в базе данных. Оба этих поля являются экземплярами Joda DataTime. Эти поля определены в двух признаков, называемых HasUpdatedAt и HasCreatedAt, для таблицScala Reflection для обновления класса case val
trait HasCreatedAt {
val createdAt: Option[DateTime]
}
case class User(name:String,createdAt:Option[DateTime] = None) extends HasCreatedAt
Я хотел бы знать, как я могу использовать отражение для вызова метода копирования пользователя, чтобы обновить значение createdAt при вставке базы данных метод.
Edit после @vptron и @ Кевин-райт комментариев
У меня есть репо, как этот
trait BaseRepo[ID, R] {
def insert(r: R)(implicit session: Session): ID
}
Я хочу, чтобы осуществить вставку только один раз, и я хочу быть createdAt обновлено, поэтому я не использую метод копирования, иначе мне нужно реализовать его везде, где я использую столбец createdAt.
Зачем вам нужно отражение? Метод 'copy' не является приватным. – vptheron
НЕ ДЕЛАЙТЕ ЭТО. У вас нет гарантии, что scalac не будет делать оптимизацию при условии, что неизменяемые объекты, по сути, неизменяемы. Используйте 'copy', вот для чего это! –
Спасибо за комментарии @vptheron, я просто обновил вопрос, чтобы добавить более подробные сведения, объясняющие, почему я не хочу использовать метод копирования здесь. – dirceusemighini