В моей базе данных есть две таблицы, которые выглядят примерно так: внешний ключ от job_label.job_id
до эквивалентного столбца в job_record
.Кроме того, тройка из job_id
, label_key
и label
в job_record
имеет уникальное ограничение.
mysql> select * from job_record;
+--------+---------+
| job_id | state |
+--------+---------+
| 1 | success |
| 2 | running |
| 3 | errored |
| 4 | success |
+--------+---------+
mysql> select * from job_label
+--------+-----------+--------+
| job_id | label_key | label |
+--------+-----------+--------+
| 1 | name | job 1 |
| 1 | type | normal |
+--------+-----------+--------+
На стороне класса Java у меня есть этот класс:
@Entity
@Table(name = "job_record")
public class JobRecord {
@Id
@Column(name = "job_id")
private String jobId;
@Enumerated(EnumType.STRING)
@Column(name = "state")
private JobState state;
}
Я попытался определить класс для job_label
, который выглядит примерно так:
public class JobLabelRecord {
@Enumerated(EnumType.STRING)
@Column(name = "label_key")
private JobLabelKey key;
@Column(name = "label")
private String label;
}
И затем я хочу поле в JobRecord
, которое предоставляет мне все метки для этого задания какList<JobLabelRecord>
.Однако ничего, что я пробовал, не работает.
Я пытался объявить JobLabelRecord
как Embeddable
с эквивалентным полем в JobRecord
как Embedded
.Я попытался использовать сопоставления ManyToOne
и OneToMany
, но это не удается, потому что в JobLabelRecord
нет столбцов Id
(и я ничего не делаю с этими работами правильно).
Должен ли я бытьвместо этого используется ElementCollection
?Я тоже это попробовал, но безуспешно.
Есть идеи здесь?Спасибо!