Ciao ragazzi,
ho un problema. Non riesco a visualizzare con struts il contenuto di una tabella collegata ad un altra.
Mi spiego meglio postando il codice ( tipica situazione master/detail ):
Tabella Movimenti:
Codice PHP:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.nota.beans.Movimenti" table="movimenti" schema="public">
<id name="id" type="int">
<column name="id" />
<generator class="assigned" />
</id>
<many-to-one name="tipiMovimento" class="com.nota.beans.TipiMovimento" fetch="select">
<column name="id_tipo_movimento" not-null="true" />
</many-to-one>
<many-to-one name="soggetti" class="com.nota.beans.Soggetti" fetch="select">
<column name="id_soggetto" />
</many-to-one>
<property name="numero" type="string">
<column name="numero" length="20" />
</property>
<property name="data" type="string">
<column name="data" length="10" not-null="true" />
</property>
<property name="aggPianoDeiConti" type="string">
<column name="agg_piano_dei_conti" length="1" />
</property>
<property name="annoRif" type="int">
<column name="anno_rif" not-null="true" />
</property>
<property name="descrizione" type="string">
<column name="descrizione" length="100" />
</property>
<property name="progressivoUnivoco" type="string">
<column name="progressivo_univoco" length="50" />
</property>
<property name="progressivo" type="java.lang.Integer">
<column name="progressivo" />
</property>
<set name="dettaglioMovimentis" inverse="true">
<key>
<column name="id_movimento" not-null="true" />
</key>
<one-to-many class="com.nota.beans.DettaglioMovimenti" />
</set>
</class>
</hibernate-mapping>
Tabella Dettaglio Movimenti:
Codice PHP:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.nota.beans.DettaglioMovimenti" table="dettaglio_movimenti" schema="public">
<id name="id" type="int">
<column name="id" />
<generator class="assigned" />
</id>
<many-to-one name="movimenti" class="com.nota.beans.Movimenti" fetch="select">
<column name="id_movimento" not-null="true" />
</many-to-one>
<property name="dataAggiornamento" type="timestamp">
<column name="data_aggiornamento" length="29" not-null="true" />
</property>
<property name="codiceSottoconto" type="string">
<column name="codice_sottoconto" length="10" not-null="true" />
</property>
<property name="dare" type="double">
<column name="dare" precision="17" scale="17" not-null="true" />
</property>
<property name="avere" type="double">
<column name="avere" precision="17" scale="17" not-null="true" />
</property>
<property name="progressivoDettaglio" type="int">
<column name="progressivo_dettaglio" not-null="true" />
</property>
<property name="annoRif" type="string">
<column name="anno_rif" length="4" not-null="true" />
</property>
</class>
</hibernate-mapping>
Ecco la jsp dove visualizzo i movimenti:
Codice PHP:
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<table class="griglia">
<tr>
<th width="1"></th>
<th width="10%">Prog. Univ.</th>
<th width="1">Prog.</th>
<th width="10%">Data</th>
<th>Descrizione</th>
<th width="1">PC</th>
</tr>
<logic:iterate id="movimenti" name="listaMovimenti" indexId="indice">
<tr>
<td><html:image src="images/m.gif"/></td>
<td><bean:write name="movimenti" property="progressivoUnivoco"/></td>
<td><bean:write name="movimenti" property="progressivo"/></td>
<td><bean:write name="movimenti" property="data"/></td>
<td><bean:write name="movimenti" property="descrizione"/></td>
<td><bean:write name="movimenti" property="aggPianoDeiConti"/></td>
</tr>
</logic:iterate>
</table>
Come posso visualizzare il dettaglio dei movimenti tramite struts?
listaMovimenti viene generata in questo modo:
Codice PHP:
public static List<Movimenti> listaTuttiMovimenti() {
List<Movimenti> result=null;
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Query q = session.createQuery(" from Movimenti");
result=q.list();
tx.commit();
}
catch (HibernateException he) {
if (tx!=null)
tx.rollback();
throw he;
}
finally {
session.close();
}
return result;
}
Ho però già notato in debug che "movimenti" ( inteso come oggetto usato nella jsp ) non ha al suo interno il dettaglio movimenti per ogni record.
E tra l'altro quando provo a ricavare il dettaglio movimento per ogni movimento ottengo un errore del tipo:
Caused by: org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.nota.beans.Movimenti.dettaglioMovimentis, no session or session was closed
Provo a ricavarlo così:
<logic:notEmpty name="movimenti" property="dettaglioMovimentis">
<bean:write name="movimenti" property="dettaglioMovimentis.annoRif" />,
</logic:notEmpty>
Come mai?