Вот как я решу вашу проблему
Я работаю с устаревшей системой (Oracle) , где от нее зависят другие системы . Чтобы использовать его, администратор базы данных (не я) создает ссылку на базу данных с правами доступа только для чтения. Поэтому, если мне нужно создать новую сущность для новой системы, не повреждая (и не беспокоясь) базу данных, которая построена поверх нашей унаследованной системы, я делаю следующее:
Предположим, здесь идет наше наследие класс
@Entity
public class LegacySystemClass {
private Integer id;
/**
* I have read-only access privilege
* So insertable=false, updatable=false
*/
@Id
@Column(name="LEGACY_SYSTEM_ID", insertable=false, updatable=false)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
И мне нужно создать класс для новой Системы, который зависит от LegacyClass
@Entity
public class NewSystemClass {
private Integer id;
private LegacySystemClass legacySystemClass;
@Id
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToOne
@JoinColumn(name="LEGACY_SYSTEM_ID")
public LegacySystemClass getLegacySystemClass() {
return legacySystemClass;
}
public void setLegacySystemClass(LegacySystemClass legacySystemClass) {
this.legacySystemClass = legacySystemClass;
}
}
Теперь я генерирую файл SQL в соответствии с
AnnotationConfiguration configuration = new AnnotationConfiguration();
configuration
.addAnnotatedClass(NewSystemClass.class)
.addAnnotatedClass(LegacyClass.class)
.setProperty(Environment.DIALECT, <TYPE_YOUR_DIALECT>)
.setProperty(Environment.DRIVER, <TYPE_YOUR_DRIVER>);
SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");
/*
schema.create(<DO_YOU_WANT_TO_PRINT_TO_THE_CONSOLE>, <DO_YOU_WANT_TO_EXPORT_THE_SCRIPT_TO_THE_DATABASE>);
*/
/**
* Make sure set up second parameter as false
* See above
*/
schema.create(true, false);
Будет сгенерирован файл с именем schema.sql, который содержит
create table LegacySystemClass (LEGACY_SYSTEM_ID integer not null, primary key (LEGACY_SYSTEM_ID))
create table NewSystemClass (id integer not null, LEGACY_SYSTEM_ID integer, primary key (id))
alter table NewSystemClass add index FK8533D2E95B9B5D88 (LEGACY_SYSTEM_ID), add constraint FK8533D2E95B9B5D88 foreign key (LEGACY_SYSTEM_ID) references LegacySystemClass
Я извлекаю любой SQL, связанный с нашей устаревшей системой , такой как LegacyClass. Наша окончательная схема.sql показана следующим образом
create table NewSystemClass (id integer not null, LEGACY_SYSTEM_ID integer, primary key (id))
alter table NewSystemClass add index FK8533D2E95B9B5D88 (LEGACY_SYSTEM_ID), add constraint FK8533D2E95B9B5D88 foreign key (LEGACY_SYSTEM_ID) references LegacySystemClass (LEGACY_SYSTEM_ID)
Я иду в комнату DBA и спрашиваю его
Можете ли вы запустить этот файл schema.sql для меня, пожалуйста ???
Но, как сказал @Pascal Thivent
Коммуникация - это ключ (Принцип экстремального программирования - XP)