gpt4 book ai didi

java - 使用 JPA 关系映射的 EJB 3 持久性

转载 作者:行者123 更新时间:2023-11-29 14:26:03 25 4
gpt4 key购买 nike

我有两个实体:

语料库实体:

@Entity(name = "CORPUS")
public class Corpus implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;

@OneToMany(mappedBy = "corpus", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<CorpusHistory> corpusHistories;

//Setters and getters...
}

语料库历史实体:

@Entity(name = "CORPUS_HISTORY")
public class CorpusHistory implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ID")
private Long id;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="CORPUS_ID")
private Corpus corpus;

//Setters and getters...
}

语料库实体可以有许多语料库历史记录,因此我用@OneToMany对其进行注释。我希望使用语料库 ID 完成映射,因此我在语料库历史实体中使用 @JoinColumn(name="CORPUS_ID")@ManyToOne 注释。

在将语料库对象保存到数据库之前,我为其设置了语料库历史集合:

LinkedList<CorpusHistory> corpusHistories = new LinkedList<CorpusHistory>();
for (Change change : changes) {
CorpusHistory corpusHistory = new CorpusHistory();
//corpusHistory.setCorpusId(String.valueOf(corpusId)); ?????
corpusHistory.setRevisionAuthor(change.getName());
corpusHistory.setRevisionDate(change.getWhen());
corpusHistory.setRevisionNote(change.getNote());
//corpusHistoryFacade.create(corpusHistory);
corpusHistories.add(corpusHistory);
}

corpus.setCorpusHistories(corpusHistories);

记录已创建,一切正常,但在语料库历史表中,CORPUS_ID 列始终为空。当我从数据库检索语料库时,历史列表为空。我不明白如果语料库记录尚未创建,如何指定语料库ID到语料库历史?

这不是 EJB 要做的工作吗?通过 @OneToMany@ManyToOne 映射,应将适当的 ID 映射并存储到适当的列中(在这种情况下,语料库 ID 应存储在语料库历史列 CORPUS_ID 的每条记录中) )。

或者我在这里误解了什么?我尝试了很多教程,但没有成功......我被困在这里。

最佳答案

for (Change change : changes) {
CorpusHistory corpusHistory = new CorpusHistory();
corpusHistory.setCorpus(corpus);
...
}

所有者一方是没有mappedBy属性的一方。您必须初始化所有者方才能告诉 JPA 该关联存在。由于您在 corpus.histories 上有级联,因此当您保留语料库时,JPA 也会保留历史记录。

关于java - 使用 JPA 关系映射的 EJB 3 持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936256/

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