2011-05-11 86 views
0

我對序列有一個奇怪的問題。我使用postgresql 9和geronimo 2.2。我在db環境中創建了序列PLANTS_ID_SEQ,當我嘗試創建一個新實體時,在我的日誌(來自postegresql)中發現存在關係PLANTS_ID_SEQ的錯誤。它似乎試圖創建已經創建的序列。這是從實體bean的代碼:Postgresql/openJPA(geronimo)序列號

@Id 
@GeneratedValue(generator="PLANTS_SEQ",strategy=GenerationType.SEQUENCE) @SequenceGenerator(name="PLANTS_SEQ", sequenceName="PLANTS_ID_SEQ",allocationSize=1) @Column(name = "ID") 
private Integer id; 

請注意,如果我改變序列名(eg sequenceName="MY_SEQ"),那麼該代碼可以正常運行,但在PostgreSQL中創建(顯然使用)的MY_SEQ序列。如果任何人有關於這種情況的線索,請分享。 謝謝喬治

+0

你應該報告這是一個錯誤,我認爲... – 2011-05-12 02:13:00

回答

1

如果你的表有一個SERIAL類型的列,那麼postgres會爲你創建序列並在插入時自動使用它。

它創建名爲「tablename_id_seq」的順序...

也許你正在嘗試複製什麼Postgres的已經做了,並創建一個重複的序列。

+0

問題是,每當服務器重新啓動時,jpa都會嘗試創建序列。可能,它忽略了序列的存在。因此,問題依然存在。 – nonouco 2011-05-15 12:50:54

0

解決: 應該添加在persistence.xml中以下屬性:

property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(Sequences=false)" 

這樣,OpenJPA時的MappingTool不會再次嘗試創建序列。

+0

我想你錯過了也向我們展示了應該添加在persistence.xml中的屬性 – 2011-05-15 15:17:50

+0

你是對的,它在標籤屬性中並被編輯清除。我對標籤進行了分條並更新。 – nonouco 2011-05-15 16:14:42