你好我是hibernate,Primefaces和JSF的新手。我有一个问题,我不知道如何继续代码。 我在计算机中有一个带有firebird的数据库,我用jdbc.properties连接并在index.xhtml中带有primefaces的数据表中显示它。有用。 我有EmpBean.java,Empresa.java,EmpresaDAO.java,EmpresaService.java。 现在我想在数据表中选择一行,当我按下按钮时,会转到其他带有其他数据表和数据的Web。它被称为Ldiario。我已经在Empresa.java和Ldiario.java中休眠了ManyToOne和OneToMany,但我如何访问Ldiario的数据,我必须制作LdiarioDAO,LDIarioService或它不是必要的?对不起我的英语,我正在学习它。
Empresa.java
@Entity
@Table(name = "empresas")
public class Empresa implements Serializable{
@Id
@Column(name = "CLAVE")
@GeneratedValue private Integer CLAVE;
@OneToMany(mappedBy = "empresa")
private Set<Ldiario> ldiarios;
Ldiario.java
@Entity
@Table(name = "LDIARIO2014")
public class Ldiario implements Serializable{
@Id
@Column(name = "CLAVE")
@GeneratedValue private Integer CLAVE;
@ManyToOne
@JoinColumn (name = "clave_id")
private Empresa empresa;
的index.xhtml
<h:head>
<title>Lista con Java Server Faces</title>
</h:head>
<h:body>
<h:form id="form">
<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">
<p:commandButton action="#{empresaBean.View}" value="Seleccionar" title="Ir Menu" rowKey="#{emp.CLAVE}" >
<f:setPropertyActionListener target="#{empresaBean.empresa}" value="#{empresaBean.selectedEmpresa}" />
</p:commandButton>
<p:commandButton process="radioDT" update=":form:displaySingle" icon="ui-icon-search" value="View" oncomplete="PF('empresaDialog').show()" />
.
.
.
diario.xhtml
<p:dataTable var="emp" value="#{empresaBean.getEmpresaList()}"
selection="#{empresaBean.selectedEmpresa}" rowKey="#{emp.CLAVE}">
如果我在第二个数据库中有empresaBean.getEmpresaList()可以访问数据Ldiario?怎么样?非常感谢。
答案 0 :(得分:0)
这不是与Primefaces密切相关的问题,您应该检查您的架构。
您应该将中间另一层放在中间,并将您的休眠数据模型(DAO)转换为控制器层中的DTO(数据传输对象)(我们将讨论M V C模式)。有关Java Converting Classes的更多信息,请参阅。 这不是一个好的做法,直接显示你的DAO来查看图层并对其进行操作。 与DAO相反,DTO是实现java.io.Serializable的轻量级对象,它只包含getter和setter,并且它们不包含任何逻辑,并且它们非常适合传输数据。
这样,数据库所在的位置并不重要,数据库可能不存在。或者您可以决定使用其他数据提供程序(例如Web服务,xml或NOSQL DB)更改它,而不对视图层进行任何更改。每个DTO对象可以由来自不同数据源的数据组成。