2015-05-24 3 views
2

У меня есть структура таблицы, как показано ниже:Slick 3.0.0 AutoIncrement Composite Key

Table1: 
    id: Int 
    name: String 
    version: Int 

Соответствующее Slick представление таблицы будет:

class Table1(tag: Tag) extends Table[(Int, String, Int)](tag, "TABLE1") { 
    def id = column[Int]("ID") 
    def name = column[String]("NAME") 
    def version = column[Int]("VERSION") 

    def pk = primaryKey("pk_a", (id, version)) 
    } 

Как я могу сделать версию для авто инкремент для этого идентификатора?

я могу иметь такие элементы, как:

id name version 
1 n1 1 
1 n2 2 
2 xyz 1 
3 bmp 1 
3 abc 2 

Так выше структура имеет идентификаторами 1 и 3 в версиях 1 и 2, я хочу, чтобы иметь версию автоматического приращения. Если есть встроенная функция, я бы хотел ее использовать. Если нет, я должен сначала выпустить select, добавить 1 t версию и создать новую запись. Какие-либо предложения?

+0

При использовании выберите первый вариант, в какой-то момент, вы будете иметь повторяющиеся ключевые проблемы. Если два запроса выполняются одновременно. –

+0

Итак, что может быть лучшим способом сделать это? Я хочу воздержаться от использования триггеров! – sparkr

+0

Вы не можете. Вам придется использовать триггеры, если вы хотите гарантировать, что дублирующих ключей не будет. –

ответ

0

Вам нужно будет использовать триггеры. Таким образом, при вставке, вы можете попросить MySQL или Postgresql, чтобы установить значение version в результате запроса SQL:

select max(version) from Table1 where id = x 
+0

Я использую Postgres, и поскольку я новичок в Postgres, мне нужно найти документацию о том, как я могу настроить триггер! – sparkr

Смежные вопросы