Как сгенерировать составной ключ с двумя полями автоинкремента и сбросить второй при первом изменении - PullRequest
0 голосов
/ 11 февраля 2020

Мне нужно определить Entity, идентифицированный составным ключом, и этот составной ключ должен быть сгенерирован автоматически. Вот составной ключ ...

@AllArgsConstructor
@NoArgsConstructor
public class PK implements Serializable {

    private UUID id;
    private int version;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PK pk = (PK) o;
        return Objects.equals(id, pk.id) && Objects.equals(version, pk.version);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, version);
    }
}

... заканчивается здесь сущностью:

@Getter
@Entity
@Table(name = "questionnaire")
@IdClass(PK.class)
public class Questionnaire {

    @Id
    @GeneratedValue
    @NotNull
    @Column(name = "id", nullable = false, updatable = false)
    private UUID id;

    @Id
    @GeneratedValue(strategy= GenerationType.SEQUENCE)
    @Column(name = "version", nullable = false, updatable = false)
    @NotNull
    private int version;

    @Column(name = "definition")
    @Lob
    @Setter
    private String definition;
}

Составной ключ состоит из полей id и version, где id должен содержать автоматически сгенерированный UUID, тогда как version должен быть автоинкрементным целым числом. Проблема в том, что version должен начинаться с 1 для каждой новой сущности:

+--------------------------------------+---------+------------+
|                                   ID | VERSION | DEFINITION |
+--------------------------------------+---------+------------+
| 250d7ef2-fb84-4a61-9ad4-bff3d2fa8db7 |       1 | {CLOB}     |
| 250d7ef2-fb84-4a61-9ad4-bff3d2fa8db7 |       2 | {CLOB}     |
| 250d7ef2-fb84-4a61-9ad4-bff3d2fa8db7 |       3 | {CLOB}     |
| 7102cf45-1e4b-4e3f-b8e9-ab90dd597f21 |       1 | {CLOB}     |
| 7102cf45-1e4b-4e3f-b8e9-ab90dd597f21 |       2 | {CLOB}     |
| 7102cf45-1e4b-4e3f-b8e9-ab90dd597f21 |       3 | {CLOB}     |
+--------------------------------------+---------+------------+

В приведенной выше таблице есть 2 сущности (250d7ef2-fb84-4a61-9ad4-bff3d2fa8db7 и 7102cf45-1e4b-4e3f-b8e9-ab90dd597f21), каждая с 3 версиями .

Любая помощь будет очень признательна.

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