У меня есть MappedSuperclass
, где я также храню коллекцию следующим образом:
@Data
@MappedSuperclass
public abstract class EntityMetaData {
@Id
@GeneratedValue
private Long id;
@Column(length = 150, nullable = false)
private String runId;
@CollectionTable
@ElementCollection(fetch = EAGER)
@MapKeyColumn(length = 50)
Map<String, String> extraFields;
}
Теперь, как и следовало ожидать, я получаю для каждой унаследованной сущности отдельную таблицу:
+-----------------------------+
| Tables_in_foo3 |
+-----------------------------+
| account_list |
| account_list_extra_fields |
| score_list |
| score_list_extra_fields |
+-----------------------------+
Итак, мой вопрос: есть ли способ, при котором у меня есть только одна таблица «extra_fields», которая используется всеми сущностями?
РЕДАКТИРОВАТЬ 1: я пытался использовать атрибут имени таблицы @CollectionTable(name = "extra_fields")
, который действительноимя таблицы, а не просто постфикс.Итак, теперь у меня есть одна общая таблица, но у меня по-прежнему есть один столбец идентификатора для каждой сущности:
MariaDB [(none)]> desc foo3.extra_fields;
+------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+--------------+------+-----+---------+-------+
| score_list_id | bigint(20) | NO | MUL | NULL | |
| a_string | varchar(255) | YES | | NULL | |
| extra_fields_key | datetime | NO | PRI | NULL | |
| account_list_id | bigint(20) | NO | MUL | NULL | |
+------------------------+--------------+------+-----+---------+-------+
Однако это теперь не проблема, поскольку мы не можем сохранить одну сущность без предоставления всех идентификаторов.Т.е. сохранение сущности счета вызывает исключение Caused by: java.sql.SQLException: Field 'account_list_entity_id' doesn't have a default value
.Есть ли способ иметь один уникальный идентификатор для всех сущностей и только один «entity_id» в качестве ключа соединения?
РЕДАКТИРОВАТЬ 2: я добавил joinColumns=@JoinColumn(name = "id", referencedColumnName = "id")
, который работает, но теперь мне нужен глобальный уникальный идентификатор для всехсущности не только по таблице сущностей.Но когда я теперь использую UUID, это действительно усложняет специальные запросы:
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID id;
Поскольку столбцы идентификаторов теперь выглядят так:
| id |
+------------------+
| �N����E���%�_o�� |
Могу ли я иметь более читаемый UUID, такой какпростое число?Или я могу использовать дополнительный столбец для источника идентификатора (таблица)?