我有两个实体
@Entity
public class Tabulka{
@OneToMany(mappedBy = "tabulka")
private List<VysledkyHraca> vysledkyHraca;
.
.
.
}
和
@Entity
public class VysledkyHraca{
@ManyToOne
private Tabulka tabulka;
.
.
.
}
现在我创建了VysledkyHraca的新实例并将其保存在数据库中:
em.merge(vysledkyHraca);
其中em是EntityManager em;
但是当我想写Tabulka项目时
<h:dataTable value="#{item.vysledkyHraca}" var="item1" >
<h:column>
<f:facet name="header">
<h:outputText value="hrac"/>
</f:facet>
<h:outputText value="#{item1.hrac}"/>
</h:column>
</h:dataTable>
我在这张表中没有看到新项目。我必须再次构建并运行此应用程序才能看到这个新项目。如果我想立即看到这个新项目,我需要做什么?
我尝试调用em.flush或em.refresh但它没有帮助
请求帮助
答案 0 :(得分:0)
由于您没有更新现有数据,因此需要使用em.persist(newIstance); 如果你想看到立即的变化,你需要为你的应用程序添加一些ajax功能,我建议你使用Icefaces或Richfaces。
答案 1 :(得分:0)
您无需在Tabulka中手动更新实体添加另一种方法:
public void addVysledkyHraca(VysledkyHraca v){
this.vysledkyHraca.add(v);
if(v.getTabulka()!=this)
v.setTabulka(this);
}
在VysledkyHraca:
public void setTabulka(Tabulka t) {
this.tabulka = t;
if (!t.getVysledkyHraca().contains(this)) {
t.getVysledkyHraca().add(this);
}
}
当你更新tabulka时,只需调用addVysledkyHraca将新的VysledkyHraca添加到列表中。