Итак, я работаю над приложением с множеством связей и таблиц поиска, но все сводится к следующему:
лицо
id INT (PK)
... (name, address, etc)
optcode VARCHAR (FK to Options)
typecode VARCHAR (FK to Types)
Опция
optcode VARCHAR (PK)
optdesc VARCHAR
... (more meta data, like date added, etc)
Типы
code VARCHAR (PK)
desc VARCHAR
... (more meta data, like date added, etc)
Я использую hibernate для доступа к этим таблицам, и, с одной стороны, у Object Relations есть свои преимущества, но с другой стороны, просто использование Strings для кодов работает лучше.
Что лучше, чем объектные отношения против ключей против обоих?
Просто используя ключи:
public class Person {
private int id;
... (more attributes)
private String optcode;
private String typecode;
}
In the services:
Person person = new Person();
person.setOptcode("ABC");
person.setTypecode("XYZ");
session.save(person);
Или путь O / R:
public class Person {
private int id;
... (more attributes)
@JoinColumn
private Options option;
@JoinColumn
private Types type;
}
In the services:
Person person = new Person();
person.setOption(new Options("ABC")); //Assume constructor fills in the 'optcode'
person.setType(new Types("XYZ")); //Same, with 'code'
session.save(person);
В большинстве случаев постоянства у меня есть только «код», но много раз при отображении данных было бы неплохо показать «desc»
Поскольку у меня будет место для управления объектами Options и Types, они все равно будут существовать, но просто раздражает необходимость заключать «код» в объект.
Как вы думаете, каковы плюсы / минусы разных способов? Что если я просто добавлю оба объекта Person, чтобы я мог использовать то, что более удобно? А как насчет создания сеттеров, которые просто помещают строку в новую сущность Options / Types?
Я пытаюсь найти наилучший способ, чтобы он был последовательным, сейчас я просто делал то, что требовало наименьшее количество новых сущностей, но в конечном итоге все будет представлено спящими сущностями.
Обновление: В результате сущность Person будет иметь почти 20 уникальных отношений сущностей (каждая из которых указывает на отдельную таблицу). Возможно, в веб-интерфейсе будут раскрывающиеся списки, содержащие значения для каждой таблицы. , поэтому я ожидаю, что у меня будет только «код», который можно использовать для сохранения.
Related: На самом деле я использую PersonImpl (обычный POJO) и PersonEntity (Hibernate Entity) и Dozer Mapping для перехода между ними.