我有两个实体:
语料库实体:
@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 的每条记录中)。
或者我在这里误解了什么?我尝试了很多教程,没有成功......我被困在这里。