PDA

View Full Version : [NHibernate - .NET 2.0]Dubbi per le relazioni


RaouL_BennetH
05-05-2009, 11:02
Ciao a tutti :)

Ho queste entità:



public class Dipendente
{

private int id_dipendente;
private string cognome;
private string nome;

//public bla getter e setter
}

public class DipendenteContratto
{

private int id_contratto;
private int id_dipendente;
private DateTime assunzione;
private double paga;

//public bla getter e setter
}

public class TipoContratto
{

private int id_contratto;
private string descrizione;

//public bla getter e setter
}



Il mio dubbio è sull'entità dipendenteContratto per quanto riguarda la mappatura con nhibernate dato che deve relazionarsi a due tabelle.

Come tipo di relazione ho individuato uno ad uno perchè un dipendente non
può avere più contratti ma soltanto uno.

Il primo dubbio è:

Nello schema xml dell'entità Dipendente, devo comunque mettere una relazione a DipendenteContratto o soltanto in quest'ultima ?

Come si esprimono tali relazioni negli schemi xml di hibernate?

I miei schemi sono i seguenti:


<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Dipendente, TestNhibernate" table="Dipendente">
<id name="ID_Dipendente" column="id_dipendente" type="Int32" unsaved-value="0">
<generator class="assigned"></generator>
</id>
<property name="Cognome" column="cognome" type="String"</property>
<property name="Nome" column="nome" type="String"</property>
</class>



<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="DipendenteContratto, TestNhibernate" table="DipendenteContratto">
<id name="ID_Contratto" column="id_contratto" type="Int32" unsaved-value="0">
<generator class="assigned"></generator>
</id>
<property name="Assunzione" column="assunzione" type="DateTime"></property>

//qui dovrei mettere le relazioni....



Grazie mille a tutti :)

RaouL.

RaouL_BennetH
05-05-2009, 12:01
piccolo passo in avanti per le relazioni:


<set name="ID_Dipendente" cascade="all" lazy="true">
<key column="id_dipendente" ></key>
<many-to-one class="Dipendente, TestNhibernate"/>


Il che ho provato che mi è utile per farmi restituire i records ma non ho minimamente capito a cosa serva per una procedura di inserimento per esempio.

Cioè, se inserisco un contratto nuovo, mi aspetto che mi inserisca automaticamente l'id del dipendente nella tabella dipendenteContratto...

Se devo invece ricavarmi prima l'id del dipendente dopo averlo inserito e poi usare quel valore per la tabella dipendenteContratto, a cosa serve?

RaouL_BennetH
06-05-2009, 16:28
Ho risolto seguendo la guida ufficiale di hibernate in questo modo:



<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="NomeClasse" table="tabella1">
<id name="Id" column="id">
<generator class="identity"></generator>
</id>
<property name="blabla"/>
//i vari campi della prima tabella

<join table="tabella2">
<key column="relativeId"></key>
<property name="blablbalb"/>
//i vari campi della seconda tabella



E.. senza alcuno sbattimento si preoccupa di insert, update e blablabla :)