我在我的 Java EE 项目中使用 EclipseLink 和 PostgreSQL 数据库。当我持久/刷新属于 oneToMany/manytoOne 关联的实体时,我很难找到正确行为的正确注释。
例如,我有一个实体“项目”,它首先由用户通过 UI 创建。然后用户可以将“分析”添加到他们创建的项目中。因此,分析是一个项目的一部分,一个项目可以有多个分析。持久操作工作正常(我在我的数据库中看到与项目关联的新分析)但是当我调用“getProject(idProject)”并显示其分析列表时,我看不到刷新的列表。
我该怎么做?
当前的注释是:
在 Projet.java 中
// bi-directional many-to-one association to Analyse
@OneToMany(mappedBy = "projet", cascade = { CascadeType.ALL })
private Set<Analyse> analyses;
在分析.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;
}
在此先感谢您的帮助!