我在使用PostgreSQL數據庫的Java EE項目中使用EclipseLink。 當我堅持/刷新屬於oneToMany/manytoOne關聯的實體時,我無法找到正確的註釋以獲得正確的行爲。EclipseLink持久性和刷新關聯實體
例如,我有一個實體「項目」,它首先由用戶通過UI創建。然後用戶可以將「分析」添加到他們創建的項目中。 因此,分析是一個項目的一部分,一個項目可以有多個分析。 堅持行動工作正常(我看到一個新的分析與我的數據庫中的項目相關聯),但是當我調用「getProject(idProject)」並顯示其分析列表時,我看不到刷新列表。
我該怎麼做?
目前的註解是:
在Projet.java
// bi-directional many-to-one association to Analyse
@OneToMany(mappedBy = "projet", cascade = { CascadeType.ALL })
private Set<Analyse> analyses;
在Analyse.java
//bi-directional many-to-one association to Projet
@ManyToOne(cascade={CascadeType.MERGE, CascadeType.REFRESH})
@JoinColumn(name="id_projet", nullable=false)
private Projet projet;
代碼堅持一個新的 「分析」:
public boolean insertAnalyse(Analyse analyse) {
System.out.println("insertAnalyse");
boolean success = true;
fac = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
em = fac.createEntityManager();
try {
em.getTransaction().begin();
em.persist(analyse);
em.getTransaction().commit();
}
catch (Exception ex) {
em.getTransaction().rollback();
System.out.println("*** Erreur in MeansDAO. insertAnalyse() : "
+ ex.getMessage());
success = false;
} finally {
em.close();
}
return success;
}
該代碼通過projectID檢索當前項目:
public Projet getProject(String p) {
System.out.println("getProject");
Projet project = null;
fac = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
em = fac.createEntityManager();
try {
em.getTransaction().begin();
StringBuilder sql = new StringBuilder();
Projet proj = em.find(Projet.class, Integer.parseInt(p));
if (proj != null) {
project = proj;
}
} catch (Exception ex) {
em.getTransaction().rollback();
System.out.println("*** Erreur in MeansDAO. getProject() : "
+ ex.getMessage());
} finally {
em.close();
}
return project;
}
在此先感謝您的幫助!
謝謝您的回答!事實上,我在創建「分析」時已經設置了「projet」,但是我沒有將「分析」添加到「projet」中,因爲我認爲(我在某處讀到)當「級聯」註釋正確設置它自動完成...所以,也許不是?與此同時,我嘗試在「getProject」函數中更改我的代碼,並在「projet」中做了正確的「projet」+刷新選擇,我得到了正確的結果(「分析」都在那裏)。 ..這聽起來不對嗎?再次感謝你的幫助! – Coralie
我面臨同樣的問題,PLZ可以解釋你如何解決? –