显示实体内容(表)

时间:2011-06-19 18:27:01

标签: hibernate jsf entity

我有两个实体

   @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但它没有帮助

请求帮助

2 个答案:

答案 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添加到列表中。