0
我有兩個實體:EJB 3持久性
語料庫實體:
@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
註釋它。我希望使用語料庫標識完成映射,因此我正在使用語料庫歷史記錄實體中的@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的每個記錄中)。
或者我在這裏誤解了一些東西?我已經嘗試過很多教程,但沒有成功......我被困在這裏。
是的,你是對的,我花了整整一天的時間...現在一切都像魅力:)謝謝。 –