ScalaQuery с несколькими первичными ключами и внешними ключами

Как мы определяем множественный первичный ключ и внешний ключ в ScalaQuery?

object myTable1 extends Table([Int])("myTable1") {
  def id = column[Int]("id", O PrimaryKey)
  def * = id
}    

object myTable2 extends Table([Int, Int, Int])("myTable2") {
  def pk1 = column[Int]("id1")
  def pk2 = column[Int]("id2")
  def fk1 = column[Int]("fk1")
  def * = pk1 ~ pk2 ~ fk1
}

Итак, какой код использовать, если я хочу, чтобы pk1 и pk2 в myTable2 были первичным ключом, а fk1 в myTable2 ссылались на id в myTable1?


person JohanSJA    schedule 18.03.2011    source источник


Ответы (1)


Следующее должно работать с основной веткой ScalaQuery:

object myTable2 extends Table([Int, Int, Int])("myTable2") {
  def pk1 = column[Int]("id1")
  def pk2 = column[Int]("id2")
  def fk1 = column[Int]("fk1")
  def * = pk1 ~ pk2 ~ fk1
  def pk = primaryKey("pk_myTable2", pk1 ~ pk2)
  def fkMyTable1 = foreignKey("myTable1_fk", fk1, myTable1)(_.id)
}

В то время как fk1 в myTable2 является базовым столбцом, fkMyTable1 — это определение внешнего ключа, которое удваивается как объединение внешнего ключа. Внешние ключи доступны в ScalaQuery 0.9.1, явные первичные ключи (с именами и с поддержкой нескольких столбцов) доступны в master на данный момент и будут включены в 0.9.2. Дополнительные примеры можно найти в классах модульных тестов ForeignKeyTest и PrimaryKeyTest.

person szeiger    schedule 18.03.2011
comment
Спасибо за ответ. Есть идеи, когда выйдет 0.9.2? Я использую SBT со ScalaQuery, поэтому я не думаю об использовании основной сборки. - person JohanSJA; 21.03.2011