Можно ли отобразить поле в сущности без определения какой-либо ассоциации?
У меня есть следующая схема в БД (упрощенно)
MainTable(
ID primary key
SOMEFIELD
CODE_FK1 -- references OtherTable1 CODE (without declared foreign key)
CODE_FK2 -- references OtherTable2 CODE (without declared foreign key)
... Other fields used
)
OtherTable1(
CODE primary key
LABEL
... other fields not used
)
OtherTable2(
CODE primary key
LABEL
... other fields not used
)
Я спрашиваю, есть ли способ определить мою сущность для основной таблицы, чтобы использовать метки непосредственно из других моих таблиц, т.е. без определения сущностей для этих других таблиц.
Я не могу изменить схему БД, которая действительно ужасна (везде есть метки / кодовые пары, определенные в таблицах кратных значений). И если бы это было возможно, это решение позволило бы сохранить мой код простым, поскольку мне не нужны эти другие объекты.
Я думаю, это приведет к чему-то вроде этого:
@Entity
public class MainEntity{
@Id
private Integer ID;
@Column(name="SOMEFIELD")
private String SomeField;
@SomeAnnotation to Join CODE_FK_1 with OtherTable1.CODE
@SomeAnnotation like @Column(name="LABEL", table="OtherTable1")
private String Label1;
@SomeAnnotation to Join CODE_FK_1 with OtherTable1.CODE
@SomeAnnotation like @Column(name="LABEL", table="OtherTable1")
private String Label1;
}
Заранее спасибо за вашу помощь!
2 ответа
Другая возможность будет использовать @Formula
аннотация для извлечения значения из другой таблицы. Это автоматически сгенерирует подвыбор при каждой загрузке вашей сущности.
Я думаю, вам нужно что-то вроде этого:
@Entity
public class MainEntity{
@Id
private Integer ID;
@Column(name="SOMEFIELD")
private String SomeField;
@Formula("(SELECT ot1.LABEL FROM OtherTable1 ot1 WHERE ot1.CODE = CODE_FK_1)")
private String Label1;
}
В [Hibernate docs][1] об этом мало информации, поэтому вам может потребоваться некоторое количество проб и ошибок, чтобы сделать это правильно (но вы должны быть в состоянии разобраться с этим hibernate.show_sql=true
,
У этого подхода есть 2 возможных недостатка:
- Это специфичный для hibernate код
- Это простой SQL, и, следовательно, может быть специфичным для базы данных
НТН
[1]: http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ hibernate docs
Вы можете использовать аннотацию @SecondaryTable. Смотрите этот пример: