gpt4 book ai didi

java - JPA 和非原始 ElementCollection

转载 作者:行者123 更新时间:2023-12-02 09:50:12 27 4
gpt4 key购买 nike

我的数据库中有两个表,如下所示,外键来自 job_label.job_idjob_record 中的等效列。此外,job_id 的三元组, label_key ,和labeljob_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> 。但是,我尝试过的任何方法都不起作用。

我尝试声明 JobLabelRecordEmbeddableJobRecord 中的等效字段如Embedded 。我尝试过使用 ManyToOneOneToMany映射,但是失败了,因为没有 Id JobLabelRecord 中的列(我对这些所做的任何事情都无法正常工作)。

我应该使用 ElementCollection在这里?我也尝试过,但没有成功。

这里有什么想法吗?谢谢!

最佳答案

您可以通过搜索“jpa elementcollection alone table”找到一个简单的示例,例如 JPA Tutorial - JPA ElementCollection CollectionTable Override Example 。将此示例应用于您的问题会得出以下结果:

@Entity
@Table(name = "job_record")
public class JobRecord {

@Id
@Column(name = "job_id")
private Integer jobId;

@Enumerated(EnumType.STRING)
@Column(name = "state")
private JobState state;

@ElementCollection
@CollectionTable(name="job_label",
joinColumns=@JoinColumn(name="job_id"))
private List<JobLabelRecord> labels;
...

@Embeddable
public class JobLabelRecord {
@Enumerated(EnumType.STRING)
@Column(name = "label_key")
private JobLabelKey key;

@Column(name = "label")
private String label;
...

另请注意,JobRecord id 可能应该是一个Integer

关于java - JPA 和非原始 ElementCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56365876/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com