2011-05-25 72 views
3

希望有人能幫助我解決這個問題。我有以下原則註釋:使用Doctrine 2註解時的麻煩@GeneratedValue(strategy =「AUTO」)

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

其中代碼是我的表主鍵。 我想要的是每次在表格中插入一行時,要自動設置的代碼值。

我正在使用Doctrine 2和PostgreSQL,問題是這樣的: 爲了預先準備數據庫,我使用SQL命令直接在PgAdmin中插入行到表中。 然後我嘗試插入新的行,但這次通過我的程序,每當我嘗試插入此行時,我都會遇到主鍵衝突,直到我嘗試了多次插入之前用SQL命令插入的行。

例如,如果我已經使用SQL命令插入了3行,我將不得不嘗試3次使用該程序,並通過第4次嘗試將該行正確插入。

是否有任何方法將初始主鍵值設置爲4(當然,這個值取決於在運行程序之前使用SQL命令插入的行數)以避免主鍵衝突?

謝謝!

回答

0

我想你對插入表中的值手動自分配碼的值:

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

在你的序列值將不會被增加的話。所以當Doctrine嘗試向數據庫中插入新行時,它將使用序列號作爲自動編號。串行狀態仍爲值1,這會導致主鍵衝突。雖然查詢失敗,但串行會遞增1,因此下次嘗試使用值2。這解釋了爲什麼三次嘗試之後,您不會再遇到主鍵衝突。

希望這個解釋有幫助。

祝你好運!