JPA - определение дополнительных значений @JoinTable / @CollectionTable при вставке - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть отношение многие ко многим, которое присваивает метки элементам (PK обозначается *):

+------+   +------------+   +-------+
| ITEM |   | ITEM_LABEL |   | LABEL |
|------|   |------------|   |-------|
| *id  |<->| *item_id   | ┌>| *id   |
|------|   |------------| | |-------|
| .... |   | *label_id  |<┘ |  ...  |
+------+   |------------|   +-------+
           |   order    |
           |------------|
           |  enabled   |
           +------------+

Метки упорядочены и могут быть отключены (оба определены в M: М стол). Я хотел бы иметь возможность читать и записывать все разрешенные метки и их порядок без необходимости создания объекта для таблицы ITEM_LABEL.

@Entity
public class Item {

    @Id
    private long id;

    @ElementCollection
    @CollectionTable(name = "ITEM_LABEL", joinColumns = @JoinColumn(name = "item_id"))
    @Where(clause = "enabled = 1")
    @MapKeyJoinColumn(name = "label_id")
    @Column(name = "order")
    private Map<Label, Integer> labels;
}

Чтение работает отлично item.getLabes() получить все разрешенные метки в правильном порядке. Запись, однако, не устанавливает "enabled = 1". Есть ли способ сделать это без создания объекта ITEM_LABEL и изменения схемы БД (установка значения по умолчанию для столбца «включено»)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...