Проблема с использованием аннотации Doctrine 2 @GeneratedValue (стратегии = "АВТО") - PullRequest
3 голосов
/ 25 мая 2011

Надеюсь, кто-нибудь может помочь мне с этим. У меня есть следующая аннотация доктрины:

/**
 * @var integer 
 *
 * @Column(name="code", type="integer", length=4)
 * @Id
 * @GeneratedValue(strategy= "AUTO")
 */
private $code;

Где код - это первичный ключ моей таблицы. Мне нужно, чтобы значение кода было правильно установлено (автоматически) каждый раз, когда в таблицу вставляется строка.

Я использую Doctrine 2 и PostgreSQL, и проблема в следующем: Чтобы подготовить БД заранее, я вставляю строки в таблицу, используя команды SQL непосредственно в PgAdmin. Затем я пытаюсь вставить новые строки, но на этот раз через свою программу, и каждый раз, когда я пытаюсь вставить эту строку, я получаю конфликт первичного ключа, пока не попробую столько раз, сколько строк было вставлено ранее с помощью команд SQL.

Например, если я вставил 3 строки с помощью команд SQL, мне пришлось бы попробовать 3 раза, используя программу, и к 4-й попытке строка была бы правильно вставлена.

Есть ли способ установить начальное значение первичного ключа равным 4 (конечно, это значение зависит от количества строк, уже вставленных с помощью команд SQL перед запуском программы), чтобы избежать конфликтов первичного ключа?

Спасибо!

1 Ответ

0 голосов
/ 19 октября 2011

Я думаю, что вы вставили значения в вашу таблицу, самостоятельно назначив значение кода:

insert into table (code, ... ) values (1, ...)

В этом случае ваше серийное значение не будет увеличено.Поэтому, когда Doctrine пытается вставить новую строку в базу данных, она будет использовать серийный номер для автоматической нумерации.Последовательный статус по-прежнему имеет значение 1, что вызывает конфликт первичного ключа.Несмотря на то, что запрос не выполнен, последовательный номер увеличивается на единицу, поэтому в следующий раз он попытается использовать значение 2.Это объясняет, почему после трех попыток у вас больше не возникает конфликт первичного ключа.

Надеюсь, это объяснение поможет.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...