У меня есть объект ConfigurationEntity
, имеющий атрибут dayOfTheWeek
, который может иметь значение 1-7.Когда клиент выбирает GET .../configuration
, он хочет иметь как имена, так и коды (1-7).Относительно декомпозиции я создал DictionaryEntity
, который сопоставляется с таблицей, в которой хранятся значения
id | group | name | code
123 | dayOfTheWeek | Monday | 1
124 | dayOfTheWeek | Tuesday | 2
etc..
. Я определил ConfigurationEntity
как
(я опускаю некоторые детали и аннотации, которые, как мне кажется,не важны в проблеме)
class ConfigurationEntity {
@Id
private Long id;
@ManyToOne
@JoinColumn(column = "dayOfTheWeek", referenceColum = "code", table = "dictionary")
@Where("dictionary.group = 'dayOfTheWeek'")
@JsonIgnore
private DictionaryEntity dayOfTheWeekDictionary;
@JsonProperty
public Number getDayOfTheWeek() {
return this.dayOfTheWeekDictionary.code;
}
@JsonProperty
public String getDayOfTheWeekDescription() {
return this.dayOfTheWeekDictionary.name;
}
}
И это работает, что приводит к ответу на GET:
{
"id": 1,
"dayOfTheWeek": 1,
"dayOfTheWeekDescription": "Monday"
}
Проблема в том, что клиент хочет отправить некоторые изменения в ConfigurationEntity
и отправляетследующий запрос PATCH:
{
"id": 1,
"dayOfTheWeek": 2
}
Hibernate / JPA (я обычно путаюсь, кто что делает, что именно) может сохранить это (с некоторыми взломами), но repository.save(entity)
возвращает мне записи с dayOfTheWeekDictionary
равнымnull
.То же самое касается repository.getById(id)
.После повторного вызова GET клиент получает правильно сопоставленную / присоединенную запись.
Вопрос в том, как сохранить сущность, зная только dictionary.code
, чтобы hibernate мог найти соответствующий DictionaryEntity
для этой записи?
Я понимаю, что DictionaryEntity
на самом деле имеетсоставной ключ (группа, код).Я могу добавить этот ключ, но, тем не менее, клиент знает только одну часть ключа, а сущность знает вторую часть (предложение @Where).Я могу получить DictionaryEntity
самостоятельно, но что если у меня 100 таблиц с 200 полями, объединенными с таблицей dictionary
?Я хочу, чтобы решение было абстрактным / общим.