Мне нужно определить 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 версиями .
Любая помощь будет очень признательна.