私は2つのエンティティを持っています:
コーパス エンティティ:
@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 列は常に null です。データベースからコーパスを取得しているとき、履歴リストは空です。コーパス レコードがまだ作成されていない場合、コーパス ID をコーパス履歴に指定する方法がわかりません。
これは EJB の仕事ではないでしょうか。@OneToMany
およびマッピングを使用@ManyToOne
して、適切な ID をマッピングし、適切な列に格納する必要があります (この場合、コーパス ID はコーパス履歴列 CORPUS_ID のすべてのレコードに格納する必要があります)。
または、ここで何か誤解していますか?多くのチュートリアルを試しましたが、成功しませんでした...ここで立ち往生しています。