Java 使用SQL在Oracle 11gXE中插入具有一对多关系的记录

Java 使用SQL在Oracle 11gXE中插入具有一对多关系的记录,java,sql,oracle,hibernate,Java,Sql,Oracle,Hibernate,我在oracle11gxe中有一个遗留模式。它有两个表(银行和银行分行具有一对多关系) 银行表的简单结构: BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and 银行分行表: BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2) 因此,在表BANK\u BRANCH中,列BANK\u CODE是表BANK的外键 我计划规

我在
oracle11gxe
中有一个遗留模式。它有两个表(银行和银行分行具有一对多关系)

银行表的简单结构:

BANK_CODE (VARCHAR2), BANK_NAME (VARCHAR2), MAIN_BANK_ADD (VARCHAR2) and
银行分行表:

BANK_CODE (VARCHAR2), BRANCH_NAME (VARCHAR2), BRANCH_ADD (VARCHAR2)
因此,在表BANK\u BRANCH中,列BANK\u CODE是表BANK的外键

我计划规范化模式中的所有表,以便它们都具有
id
。我使用了
Hibernate
并映射了这些表的每条记录,并使用
序列生成器自动生成了id。所以,现在我有了需要的带有代理键的新表

因为有很多记录,所以很麻烦


我的问题是如何使用SQL(或PL/SQL)实现这一点。我对这种语言不太熟悉。谢谢。

您可以通过两条更新语句(如果BANK_代码对于表BANK是唯一的)来实现这一点,例如使用以下脚本:

ALTER TABLE BANK ADD ID NUMBER;
ALTER TABLE BANK_BRANCH ADD BANK_ID NUMBER;

CREATE SEQUENCE BANK_SEQ;

UPDATE BANK
SET ID = BANK_SEQ.NEXTVAL;

UPDATE BANK_BRANCH t1
SET BANK_ID = (SELECT ID FROM BANK t2 WHERE t1.bank_code = t2.bank_code);

ALTER TABLE BANK ADD CONSTRAINT BANK_ID_UK UNIQUE (ID);

ALTER TABLE BANK_BRANCH ADD CONSTRAINT BANK_BRANCH_BANK_ID_FK FOREIGN KEY (BANK_ID) REFERENCES BANK(ID);