Я купил эту проблему, когда использовал другие ОРМ. Я не мог найти лучшего решения. Теперь я использую Slick и PlayFramework, поэтому я думаю, может быть, есть один.Идентификатор продукта Поиск с базой данных
Предположим, у меня есть две таблицы в моей базе: Tags
и Product
.
Я получаю информацию из одной HTML-формы, содержащей как данные продукта, так и данные тегов. Теги связаны с продуктом, поэтому, естественно, у меня есть другая таблица под названием Product_Tag
для этого двунаправленного отношения.
Затем я хранил информацию о продукте. Мой полезный код выглядит так:
Object Product extends Table[Product]("Products") {
def id = column[Int]("PRD_ID", O.PrimaryKey, O.AutoInc)
def name = column[String]("PRD_NAME")
...
}
Код тега выглядит аналогичным. Вот код для Product_Tag:
Object Product_Tag extends Table[Product_Tag]("Product_Tags") {
def prd_id = column[Int]("PRD_ID")
def tag_id = column[Int]("TAG_ID")
def tag_name = column[String]("TAG_NAME")
....
}
Я должен хранить тег, связанные с этим продуктом, когда продукт будет сохранен. Я использую этот код, чтобы сохранить его:
Product.insert(None, "product A")
Теперь проблема становится, как я могу сохранить связь между меткой и продуктом, когда я даже не знаю их идентификаторы? Да, я мог сначала сохранить tag
и product
, а затем получить их, чтобы иметь ID, но я ненавижу делать это, потому что я чувствую себя неэффективным.
Есть ли способ обойти это? Java UUID ??
Привет, я обновил до Slick 2.0 и претерпел много изменений. Я применил «возвращаемый идентификатор», но моя IDE говорит «несоответствие типов: запрос [NotInferedRT, NotInferedRU], фактический: Column [Int]». –
Да, есть куча изменений в том, как работает гладкий 2.0 и slick 1.0, но они также обновили документацию на сайте. Для конкретных изменений между версиями это должно быть полезно: http://slick.typesafe.com/doc/2.0.0/migration.html Для конкретного примера того, что вы хотите сделать, https://github.com/ slick/slick-examples/blob/master/src/main/scala/com/typesafe/slick/examples/lifted/MultiDBCakeExample.scala (вокруг строки 26-27) –