2
我對數據庫編程頗爲陌生,正試圖創建一個Java程序來訪問使用hibernate的hsqldb(version2.2.5)。我的程序中有3個類,我映射到3個表如下所示。幫助爲hsqldb創建模式sql
我想在SaleOrder和Bill之間創建一對一映射。 另外,爲了創建數據庫的模式,我嘗試了sql創建語句。 這兩個表SALEORDER和比爾有作爲FK.To避免表之間的相關性錯誤過程中創建對方的ID,我用ALTER TABLE添加約束聲明
現在,我想在開始時使用DROP TABLE語句script.I使用以下
ALTER TABLE SALEORDER DROP CONSTRAINT FK_SO_BILL;
ALTER TABLE SALEORDER DROP CONSTRAINT FK_SO_BUYER;
ALTER TABLE BILL DROP CONSTRAINT FK_BILL_SO;
ALTER TABLE BILL DROP CONSTRAINT FK_BILL_BUYER;
DROP TABLE BUYER IF EXISTS;
DROP TABLE SALEORDER IF EXISTS;
DROP TABLE BILL IF EXISTS;
然而,這時候第一次(因爲要改變的表不存在)。我找不到「IF存在」爲條款運行導致問題ALTER TABLE in hsqldb ..那麼解決方案是什麼?我應該首先單獨創建表腳本,然後添加alter table,之後顯示的drop table語句?這聽起來並不乾淨。
將是您的建議表示感謝,
真誠,
吉姆
主要架構腳本是
CREATE TABLE BUYER(
BUYER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
NAME VARCHAR(100)
);
CREATE TABLE SALEORDER(
SALEORDER_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
BUYER_ID BIGINT NOT NULL,
BILL_ID BIGINT,
);
CREATE TABLE BILL(
BILL_ID BIGINT NOT NULL PRIMARY KEY IDENTITY,
BUYER_ID BIGINT NOT NULL,
SALEORDER_ID BIGINT NOT NULL,
);
ALTER TABLE SALEORDER ADD CONSTRAINT FK_SO_BILL FOREIGN KEY(BILL_ID) REFERENCES BILL(BILL_ID);
ALTER TABLE SALEORDER ADD CONSTRAINT FK_SO_BUYER FOREIGN KEY(BUYER_ID) REFERENCES BUYER(BUYER_ID);
ALTER TABLE BILL ADD CONSTRAINT FK_BILL_BUYER FOREIGN KEY(BUYER_ID) REFERENCES BUYER(BUYER_ID);
ALTER TABLE BILL ADD CONSTRAINT FK_BILL_SO FOREIGN KEY(SALEORDER_ID) REFERENCES SALEORDER(SALEORDER_ID);
而且,我使用Ant目標創建模式
<target name="createschema" description="execute schema">
<sql
driver="${db.driver}"
url="${db.url}"
userid="${db.username}"
password="${db.password}"
print="yes"
src="${dir.schema}/${file.schema}"
caching="false"
showheaders="true"
>
<classpath>
<path location="${dir.lib}/hsqldb.jar"/>
</classpath>
</sql>
</target>
第一次沒有表時,它工作。但是當我第二次嘗試時,我得到了DROP TABLE SALEORDER IFOCUSTS CASCADE上的空指針異常。 – jimgardener
我首先使用drop schema並運行sql。它工作正常。當我再次運行它時,它會拋出nullpointer異常。這裏是sql腳本連續運行的輸出http://pastebin.com/RgWUp0CY – jimgardener
我正在創建通過使用螞蟻目標的模式。我已經將它添加到 – jimgardener