2010-05-05 23 views
0

比方說,我有幾個字段兩個表,並在每個表都有一個主鍵,這是由數據庫序列生成的技術ID:如何插入與序列生成的技術主鍵的n:m關係?

table1    table2 
-------------  ------------- 
field11 <pk>  field21 <pk> 
field12   field22 

field11field21由序列生成。

另外還有一個:

INSERT INTO table1 VALUES (table1_seq1.NEXTVAL, ... 
INSERT INTO table2 VALUES (table2_seq1.NEXTVAL, ... 

因此I:插入語句期間生成

table3 
------------- 
field11 <fk> 
field21 <fk> 

的ID在table1 UND table2table1 UND table2之間間的關係,在table3設計不知道我的程序的數據訪問層中添加行的主鍵,因爲pk的生成完全在數據庫中發生SE。

現在更新table3的最佳做法是什麼?我如何才能訪問我剛剛插入的行的主鍵?

+0

雖然我解決了我的問題,但我將此問題留待討論,因爲我認爲這可能是一個普遍問題。我有一些與我沒有明確提到的問題有關的細節,因爲我想一般性地討論這個話題。我使用的是Ibator Ibatis作爲DAO框架,它可以通過在ibator.config文件的''-tag中使用''-tag來處理這種情況。有關此特定案例的更多信息,請查看Ibatis [手冊](http://ibatis.apache.org/docs/tools/abator/configreference/generatedKey.html) – bl4ckb0l7 2010-05-05 09:00:34

回答

0

如果您遇到了這個問題,並且您使用了Ibator Ibatis框架作爲DAO層(就像我們一樣),您可以通過使用ibator.config中的<generated-key> -tag來處理這種情況。

一般通過使用序列sequencename以獲取要插入的值的下一個鍵做

SELECT sequencename.nextval FROM tablename 
名爲 tablename

解決這個問題。

PS:這裏沒有必要注意事務處理,因爲nextval函數的下一個調用將返回下一個序列值。

0

難道你沒有這些表的另一個(非替代)候選鍵?一般來說,將代理鍵作爲任何表格的只有鍵是沒有用的。假設你有一些其他的鍵,那麼你可以使用它來檢索你插入的行。