2011-06-19 174 views
0

我有兩個實體顯示內容

@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時間;

但是當我想寫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但它沒有幫助

THX的幫助

+0

您的問題在JSF的頁面中,還是在支持bean中?設置一個斷點,看看後端數據是否與前端不同 – Dejell

+0

我使用System.out.println()寫入namedquery的結果,這裏是記錄不是最新的問題 – hudi

回答

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列表。

0

既然你沒有更新你需要使用em.persist(newIstance)現有數據; 如果您想查看即時更改,您需要嚮應用程序添加一些Ajax功能,以便我推薦Icefaces或Richfaces。

+0

是的我是使用em.persist,我在數據庫中看到新記錄已創建。我認爲這個問題可以在命名查詢中。當它第一次調用這個namedquery時,它顯示正確的結果,但是當它被第二次調用時,第三...當我在命名查詢中使用連接時,它沒有顯示最新記錄。我的臨時解決方案是手動更新此實體(當id相等時,我將vysledky hraca添加到tabulka)並且它可以工作,但我不認爲這是正確的解決方案。 – hudi

+0

或問題出在實體經理。我正在使用這個:@PersistenceContext EntityManager em; – hudi