私はデータベースプログラミングに新しく、アクセスするJavaプログラムを作成しようとしていますhsqldb(version2.2.5)hibernate.Iを使用して3つのクラスを3つのテーブル以下に示すように。hsqldbのスキーマsqlを作成するのに役立ちます
SaleOrderとBillの間にを1対1のマッピングを作成したいと考えました。 また、dbのスキーマを作成するために、sql create文を試しました。 二つのテーブルSALEORDERとBILLはFK.Toが中に作成するテーブル間の依存関係のエラーを回避するよう、お互いのIDを持って、私はALTER 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はEXISTS」を使用しました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>
テーブルが1つもなかったときに初めて動作しましたが、2回目に試してみましたが、存在する場合はDROP TABLE SALEORDERにnullpointer例外が発生しています。 – jimgardener
私はドロップスキーマを最初に使用し、SQLを実行しました。それはもう一度それを走らせました。それはnullpointer例外を投げました。SQLスクリプトの連続実行の出力ですhttp://pastebin.com/RgWUp0CY – jimgardener
私は作成していますスキーマはantターゲットを使用しています。私は上記の投稿にそれを追加しました – jimgardener