Представьте, что объект Событие ссылается на объект Статус:
@Entity
@Table(name = "event")
public class Event()
{
@Id
@Column(name = "id", nullable = false)
private long id;
...
@ManyToOne
@JoinColumn(name = "status_code", nullable = false)
private Status status;
}
@Entity
@Table(name = "status")
public class Status()
{
@Id
@Column(name = "code", nullable = false)
private String code;
@Column(name = "label", nullable = false, updatable = false)
private String label;
}
Статус отображается в маленькую таблицу 'status
'. Статус - это типичный справочный файл/объект поиска.
code label
----- --------------
CRD Created
ITD Initiated
PSD Paused
CCD Cancelled
ABD Aborted
Я не уверен, что неплохо моделировать Статус как сущность. Это больше похоже на перечисление констант...
Сопоставляя Статус как объект, я могу использовать объекты состояния в Java-коде, а значения статуса одинаково присутствуют в базе данных. Это полезно для отчетности.
С другой стороны, если я хочу установить конкретное состояние для события, я не могу просто назначить постоянный статус, который я имею в виду. Сначала я должен искать правильную сущность:
event.setStatus(entityManager.find(Status.class, "CRD"))
Могу ли я избежать фрагмента кода выше? Я боюсь за штраф исполнения, и он выглядит очень тяжелым...
- Нужно ли мне настраивать атрибуты только для чтения?
- Можно ли предварительно запрограммировать эти объекты поиска и использовать их в качестве констант?
- Я пропустил важную функцию JPA?
- ...
Все мнения/предложения/рекомендации приветствуются!
Спасибо! J.