Newsgroup: it.comp.java
Titolo: OJB e auto-delete

Salve a tutti,
Mi chiamo Michele Fabbri e sto realizzando alcune prove con OJB al
fine di capirne il funzionamento, ho realizzato un semplice esempio di
Buisinness Logic composto da due oggetti Utente e Gruppo collegati da
una relazione n:m:
+--------+ n                n +--------+
| Utente |--------------------| Gruppo |
+--------+                    +--------+
Sul DataBase ho tre tabelle SU2_GRUPPI (tabella dei gruppi),
SU2_UTENTI (tabella degli utenti ) e SU2_UTEGRU la tabella che collega
gli utenti con i gruppi.
Il problema è che se elimino un gruppo, il record di collegamento tra
utente e gruppo sulla SU2_UTEGRU non viene rimosso, anche se ho
specificato auto-delete="link" nel file di configurazione
repository_user.xml,
Ho effettuato il debug della classe sql.SqlGeneratorDefaultImpl ma non
è mostrato nessun comando SQL si delete sulla SU2_UTEGRU.
...
4702  DEBUG [http-8080-Processor23] sql.SqlGeneratorDefaultImpl -
SQL:SELECT A0.gru_id,A0.gru_descri FROM SU2_GRUPPI A0 WHERE A0.gru_id
= ?
8110  DEBUG [http-8080-Processor23] sql.SqlGeneratorDefaultImpl -
SQL:DELETE FROM SU2_GRUPPI WHERE gru_id = ?
8126  DEBUG [http-8080-Processor23] sql.SqlGeneratorDefaultImpl -
SQL:SELECT A0.gru_id,A0.gru_descri FROM SU2_GRUPPI A0
10190 DEBUG [http-8080-Processor23] sql.SqlGeneratorDefaultImpl -
SQL:SELECT A0.gru_id,A0.gru_descri FROM SU2_GRUPPI A0
Questo è il codice sorgente:
public static void deleteByTemplate(Object template) 
{
  PersistenceBroker broker = null;
  try
  {			
    broker = PersistenceBrokerFactory.defaultPersistenceBroker();
    QueryByCriteria query = new QueryByCriteria(template);
    broker.deleteByQuery(query);
  }
  finally
  {
    if (broker != null) broker.close();
  }
}
Questo è il repository_user.xml
<class-descriptor class="it.cedaf.portale.persistence.G"
table="SU2_GRUPPI">
	<field-descriptor id="0" name="id" column="gru_id"
jdbc-type="VARCHAR" primarykey="true"/>
	<field-descriptor id="1" name="descrizione" column="gru_descri"
jdbc-type="VARCHAR"/>
	<!--
	<collection-descriptor
		name="menuConsole"
		element-class-ref="it.cedaf.portale.persistence.MenuConsole"
		auto-retrieve="true"
		auto-update="link"
		auto-delete="link"
		indirection-table="SU2_ABILIT"
	>
		<fk-pointing-to-this-class column="abc_id_gru"/>
		<fk-pointing-to-element-class column="abc_id_men"/>
	</collection-descriptor>		
	-->
	<collection-descriptor
		name="utenti"
		element-class-ref="it.cedaf.portale.persistence.Utente"
		indirection-table="SU2_UTEGRU"
		auto-update="link"
		auto-delete="link"
	>
		<fk-pointing-to-this-class column="utg_id_gru"/>
		<fk-pointing-to-element-class column="utg_id_ute"/>
	</collection-descriptor>
 
</class-descriptor>
<class-descriptor class="it.cedaf.portale.persistence.Utente"
table="SU2_UTENTI">
	<field-descriptor id="0" name="id" column="ute_id"
jdbc-type="VARCHAR" primarykey="true"/>
	<field-descriptor id="1" name="tipo" column="ute_tipo"
jdbc-type="CHAR"/>
	<field-descriptor id="2" name="password" column="ute_passwd"
jdbc-type="VARCHAR"/>
	<field-descriptor id="3" name="dataScadenza" column="ute_dtscad"
jdbc-type="TIMESTAMP"/>
	<field-descriptor id="4" name="descrizione" column="ute_descri"
jdbc-type="VARCHAR"/>
	<field-descriptor id="5" name="email" column="ute_email"
jdbc-type="VARCHAR"/>
</class-descriptor>

 }
Credo di aver trovato l'errore, lo riporto lo stesso anche se dal
numero di risposte che ho avuto ho come l'impressione che OJB non lo
usi nessuno!
In ogni caso il metodo deleteByQuery() del Persisnon sembra tener
conto delle relazioni dell'oggetto, infatti sostituendolo con il
metodo delete() sono eliminati anche i record della tabella di
collegamento.
Michele

 usi nessuno!
Parecchi miei conoscenti lo usano in produzione e dicono che va mucho bene
Io appena posso glielo caccio dentro, anche se e' in concorrenza un ritorno
di fiamma verso gli Entity EJB 2.0, e con hybernate.
cya N
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/