PostgreSQLデータベースを使用するJavaEEプロジェクトでEclipseLinkを使用しています。oneToMany / manytoOneアソシエーションの一部であるエンティティを永続化/更新すると、正しい動作のための適切な注釈を見つけるのに問題があります。
たとえば、UIを介してユーザーが最初に作成するエンティティ「Project」があります。次に、ユーザーは作成したプロジェクトに「分析」を追加できます。したがって、分析は1つのプロジェクトの一部であり、プロジェクトには複数の分析を含めることができます。永続化アクションは正常に機能しますが(データベースにプロジェクトに関連付けられた新しい分析が表示されます)、「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;
}
よろしくお願いします!