【发布时间】:2011-02-15 19:47:11
【问题描述】:
假设我有两个包含多个字段的表,每个表中都有一个主键,它是由数据库序列生成的技术 ID:
table1 table2
------------- -------------
field11 <pk> field21 <pk>
field12 field22
field11 和 field21 由序列生成。
table1 和 table2 之间也存在 n:m 关系,设计于 table3:
table3
-------------
field11 <fk>
field21 <fk>
table1 和 table2 中的 id 是在插入语句期间生成的:
INSERT INTO table1 VALUES (table1_seq1.NEXTVAL, ...
INSERT INTO table2 VALUES (table2_seq1.NEXTVAL, ...
因此我不知道我的程序的数据访问层中添加行的主键,因为pk的生成完全发生在数据库中。
现在更新table3 的最佳做法是什么?如何访问我刚刚插入的行的主键?
【问题讨论】:
-
虽然我解决了我的问题,但我将这个问题留待讨论,因为我认为这可能是一个普遍的问题。我有一些与我没有明确提及的问题相关的细节,因为我想笼统地讨论这个话题。我使用 Ibator Ibatis 作为 DAO 框架,这可以通过在
ibator.config-file 中的<table-name>-tag 中使用<generated-key>-tag 来处理这种情况。有关此特定案例的更多信息,请查看 Ibatis manual
标签: database sequences data-access