Я довольно новичок в программировании баз данных и пытаюсь создать Java-программу для доступа к hsqldb (версия2.5.5) с помощью hibernate. У меня в программе 3 класса, которые я сопоставил с 3 таблицами, как указано ниже.
Я хотел создать сопоставление один к одному между SaleOrder и Биллом.
Кроме того, чтобы создать схему для базы данных, я попытался создать операторы sql.
Две таблицы SALEORDER и BILL имеют идентификаторы друг друга как FK. Чтобы избежать ошибок зависимостей между таблицами во время создания, я использовал изменить таблицу добавить ограничение операторы
Теперь я хочу использовать операторы отбрасывания таблиц в начале скрипта. Я использовал следующее
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 в hsqldb .. Так в чем же решение? Стоит ли в первый раз запускать сценарии создания таблицы самостоятельно, а затем добавить таблицу изменений, после чего удалить операторы таблицы, показанные выше?
будем благодарны за ваши предложения,
искренне,
Джим
Основной скрипт схемы:
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>