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