我是hibernate的新手,我试图访问数据但没有成功:(。我试了一个月。我有两个表,第一个Empresa和第二个LDiario。我可以看到Empresa数据,但当我选择一个无线电按钮进入下一个表(LDiario)时,我看到它无效。
OneToMany Empresa - > LDIario ManyToOne LDIario - > Empresa
我正在使用Primefaces。对不起我的英语,我正在学习它。
更新我已经完成了LDiario,Empresa的更新,并添加了EmpresaBean
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 更新
@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 View(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"
&GT; LDiario View(Not Works)
<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}">
非常感谢。
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";
}
}
我正在使用dbvisualizer,因为数据库是其他软件,我不理解每个表。
PKTABLE_NAME EMPRESAS LDIARIO2014
PKCOLUMN_NAME CLAVE CLAVE
FK_NAME INTEG_651
PK_NAME INTEG_39
更新2 我添加了两张新图片。我认为错误就像你在empresa_id中所说,但我知道我必须写在那里。
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 :(得分:0)
试试这个
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "empresa")
private List<LDiario> ldiarios;
答案 1 :(得分: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()
是否返回带有ldiarios的empresas(我在empresa_id
中看不到LDIARIO2014
,其他列是外键吗?从图像中看不清楚。)< / p>
这两个<p:dataTable>
是否在同一页面上?当您在第一个表格中选择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();
}