2015-01-13 60 views
0

你好我是新手休眠,我試圖訪問數據沒有成功:(我試了一個月,我有兩個表,第一個Empresa和第二個LDiario。我可以看到數據Empresa與我們,但是當我選擇一個單選按鈕訪問下一個表(LDiario)我看到了虛空如何使用hibernate訪問oneToMany數據? (休眠+彈簧+ Primefaces)

一對多Empresa與 - > LDIario 多對一LDIario - > Empresa與

我使用Primefaces。對不起,我的英語,我正在學習它

UPDATE我已經完成LDiario,Empresa的更新,我添加了Empr esaBean

EmpresaDaoImpl

@Transactional 
@Named 
public class EmpresaDaoImpl implements EmpresaDao{ 

    @Inject 
    private SessionFactory sessionFactory; 

    @Override 
    public List<Empresa> findAll() { 
     return sessionFactory.getCurrentSession().createQuery("from Empresa").list(); 
    } 
} 

LDiarioImpl

@Transactional 
@Named 
public class LDiarioDaoImpl implements LDiarioDao{ 

    @Inject 
    private SessionFactory sessionFactory; 

    @Override 
    public List<LDiario> findAll() { 
     return sessionFactory.getCurrentSession().createQuery("from LDiario").list(); 
    } 
} 

Empresa與UPDATE

@Entity 
@Table(name = "empresas") 
public class Empresa implements Serializable{ 

@Id 
@Column(name = "CLAVE") 
@GeneratedValue private Integer CLAVE; 

@OneToMany(mappedBy = "empresa") 
private List<LDiario> ldiarios; 

LDiario

@Entity 
@Table(name = "LDIARIO2014") 
public class LDiario implements Serializable{ 

@Id 
@Column(name = "CLAVE") 
@GeneratedValue private Integer CLAVE; 

@ManyToOne 
@JoinColumn (name = "empresa_id") 
private Empresa empresa; 

查看Empresa與(Primeface)它的工作原理。

<p:dataTable id="radioDT" var="emp" value="#{empresaBean.getEmpresaList()}" 
       selection="#{empresaBean.selectedEmpresa}" rowKey="#{emp.CLAVE}"> 



    <f:facet name="header"> 
      Lista de Empresas 
     </f:facet> 
     <p:column selectionMode="single" style="width:16px;text-align:center"/>   
     <p:column headerText="Id"> 
     <h:outputText value="#{emp.CLAVE}" /> 
     </p:column> 

     <p:column headerText="Nombre Empresa"> 
     <h:outputText value="#{emp.NOMBRE}" /> 
     </p:column> 

     <p:column headerText="AÑO"> 
     <h:outputText value="#{emp.EJERCICIO}" /> 
     </p:column> 

     <!-- "#{empresaBean.selectedEmpresa}" --> 
<f:facet name="footer" 

> LDiario查看(不工務)

<p:dataTable var="ld" value="#{empresaBean.ldiario}" rowKey="#{ld.CLAVE}"> 
     <!-- selection="#{ldiarioBean.selectedLdiario}" rowKey="#{ld.CLAVE}" --> 

     <f:facet name="header"> 
      Listado Diario 
     </f:facet> 
     <p:column selectionMode="single" style="width:16px;text-align:center"/>   
     <p:column headerText="ASIENTO"> 
     <h:outputText value="#{ld.ASIENTO}" /> 
     </p:column> 

     <p:column headerText="FECHA"> 
     <h:outputText value="#{ld.FECHA}" /> 
     </p:column> 

     <p:column headerText="SUBCUENTA"> 
     <h:outputText value="#{ld.SUBCUENTA}" /> 
     </p:column> 

      <p:column headerText="CONCEPTO"> 
     <h:outputText value="#{ld.CONCEPTO}" /> 
     </p:column> 

我不知道,如果問題是EmpresaDaoService或其他。我不知道這部分寫的是什麼。

LDiario查看

<p:dataTable var="ld" value="#{empresaBean.ldiario}" rowKey="#{ld.CLAVE}"> 

THX非常多。

EmpresaBean

@ManagedBean(name="empresaBean") 
@ViewScoped 
@Named 
public class EmpresaBean { 

    @Inject 
    private EmpresaService empresaService; 
    private Empresa empresa; 
    private Empresa selectedEmpresa; 
    private LDiario ldiario; 




    public LDiario getLdiario() { 
     return ldiario; 
    } 

    public void setLdiario(LDiario ldiario) { 
     this.ldiario = ldiario; 
    } 

    public EmpresaService getEmpresaService() { 
     return empresaService; 
    } 

    public Empresa getSelectedEmpresa() { 
     return selectedEmpresa; 
    } 

    public void setSelectedEmpresa(Empresa selectedEmpresa) { 
     this.selectedEmpresa = selectedEmpresa; 
    } 

    public void setEmpresaService(EmpresaService empresaService) { 
     this.empresaService = empresaService; 
    } 

    public EmpresaBean(){ 
    } 

    public List<Empresa> getEmpresaList(){ 

     return empresaService.getAll(); 
    } 

    public Empresa getEmpresa() { 
     return empresa; 
    } 
    public void setEmpresa(Empresa empresa) { 
     this.empresa = empresa; 
    } 

    public String View() { 

     return "/pages/menu/menuPrincipal?faces-redirect=true"; 
    } 

} 

i'm使用DBVisualizer中,因爲數據庫是其他軟件和我不明白每個表。 enter image description here

PKTABLE_NAME EMPRESAS LDIARIO2014
PKCOLUMN_NAME CLAVE CLAVE
FK_NAME INTEG_651
PK_NAME INTEG_39

UPDATE 2我增加了兩個新的圖像。我認爲這個錯誤是你在empresa_id中說的,但我知道我必須在那裏寫。

enter image description here enter image description here

LDiarioBean

@ManagedBean(name="ldiarioBean") 
@ViewScoped 
@Named 
public class LDiarioBean { 


    private LDiario ldiario; 
    @Inject 
    private LDiarioService ldiarioservice; 

    private LDiario selectedLdiario; 

    public LDiarioService getLdiarioservice() { 
     return ldiarioservice; 
    } 
    public void setLDiarioservice(LDiarioService ldiarioservice) { 
     this.ldiarioservice = ldiarioservice; 
    } 


    public LDiarioBean(){ 

    } 
    public LDiario getLdiario() { 
     return ldiario; 
    } 
    public void setLdiario(LDiario ldiario) { 
     this.ldiario = ldiario; 
    } 
    public LDiario getSelectedLdiario() { 
     return selectedLdiario; 
    } 
    public void setSelectedLdiario(LDiario selectedLdiario) { 
     this.selectedLdiario = selectedLdiario; 
    }  

public List<LDiario> getLDiarioList(){ 

     return ldiarioservice.getAll(); 
    } 

    public LDiario getLDiario() { 
     return ldiario; 
    } 
    public void setLDiario(LDiario ldiario) { 
     this.ldiario = ldiario; 
    } 
} 

LDiarioDAOImpl

@Transactional 
@Named 
public class LDiarioDaoImpl implements LDiarioDao{ 

    @Inject 
    private SessionFactory sessionFactory; 

    @Override 
    public List<LDiario> findAll() { 
     return sessionFactory.getCurrentSession().createQuery("from LDiario").list(); 
    } 
} 

回答

0

試試這個

@OneToMany(fetch = FetchType.EAGER) 
@JoinColumn(name = "empresa") 
private List<LDiario> ldiarios; 
+0

我想前幾天,但我有一個問題與LDIARIO和我認爲我不能同時帶來所有數據,因爲我認爲該表是動態的。謝謝。 – ProSyth

0

你的映射是錯誤的,用這個

// Empresa.java 

@OneToMany(mappedBy = "empresa") 
private List<LDiario> ldiarios; 


// LDiario.java 

@ManyToOne 
@JoinColumn (name = "empresa_id") 
private Empresa empresa; 

empresa_id是表LDIARIO2014列是一個外鍵表empresas名。

我不知道這是否是唯一的錯誤,但它肯定是第一個需要糾正的錯誤。有了這個更正,你應該得到ldiarios數據,當你從數據庫得到empresa,但它會顯示在頁面上的天氣取決於一些更多的代碼,你沒有提供(如empresaBean)。

無論如何,試試這個,讓我們知道結果。

更新1

首先,你需要檢查,如果你是從數據庫中獲取ldiarios。因此,調試你的代碼,看看empresaService.getAll()返回empresas與ldiarios(我沒有看到一個empresa_idLDIARIO2014,是一些其他列的外鍵?不清楚圖像)。

這兩個<p:dataTable> s在同一頁?當您在第一個表格中選擇empresa時,您希望在第二個表格中看到ldiarios?如果是的話,改變Empresa與視圖表像這樣

<p:dataTable id="radioDT" var="emp" value="#{empresaBean.getEmpresaList()}" 
      selection="#{empresaBean.selectedEmpresa}" rowKey="#{emp.CLAVE}"> 

     <p:ajax event="rowSelect" listener="#{empresaBean.selectEmpresa}" 
       update="tLDiarios"/> 

更改第二表

<p:dataTable id="tLDiarios" var="ld" value="#{empresaBean.selectedEmpresa.ldiarios}" rowKey="#{ld.CLAVE}"> 

一下添加到empresaBean

public void selectEmpresa(SelectEvent event) { 
    selectedEmpresa = (Empresa) event.getObject(); 
} 
+0

我添加了更改但我有同樣的錯誤,我添加了empresaBean和DbVisualizer thx你。 – ProSyth

+0

好吧,我添加了兩個新的圖像。我認爲這個錯誤是你在empresa_id中說的,但我知道我必須在那裏寫。 :( – ProSyth

+0

你必須自己檢查一下,或者問問DBA是否有,如果這些表之間存在外鍵,它是什麼。這裏有很多問題需要糾正,這個考慮將整個問題分解爲單獨的部分/問題,首先,你的數據庫和實體需要理清,我的答案應該可以幫到你,在你知道這一點後,然後繼續顯示數據。 –