Представьте, что у меня есть простая сущность:
@Entity
@Table(name = "PERSON")
public class Person {
@Id
@Column(name = "NAME")
private String name;
@Column(name = "GENDER")
private String gender;
}
И две таблицы, фактическая таблица, содержащая информацию, и таблица поиска.
TABLE PERSON (
NAME VARCHAR2 NOT NULL,
GENDER INT NOT NULL);
TABLE GENDER_LOOKUP (
GENDER_ID INT NOT NULL,
GENDER_NAME VARCHAR2 NOTNULL);
Я хочу сохранить информацию из моей сущности в таблицу, чтобы пол поля String автоматически преобразовывался в соответствующий пол int, используя справочную таблицу в качестве ссылки. Я подумал о двух подходах, но мне было интересно, есть ли более эффективный способ.
Создайте перечисление и используйте порядковый номер перечисления для сохранения. Я бы предпочел избежать этого, потому что я хотел бы иметь только один «источник правды» для информации и по различным деловым причинам, это должна быть справочная таблица.
Используйте @ Конвертер аннотации и написать собственный конвертер. Я думаю, что это потребует от меня запроса к таблице, чтобы вытащить соответствующую строку, поэтому это будет означать, что мне придется делать вызов JPA в базу данных каждый раз, когда что-то конвертируется.
В настоящее время я планирую использовать 2, но мне было интересно, есть ли способ сделать это в самой базе данных, поскольку я предполагаю, что использование JPA для выполнения всех этих операций стоит дороже, чем если бы я делал все в база данных. По сути, попытка сохранить пол String, а затем база данных будет просматривать таблицу поиска и переводить ее на правильный Id и сохранять его.
Я специально использую openJpa, но, надеюсь, это не спецификация реализации c.