Versioni utilizzate:
- Debian 4.0
- NHibernate 1.2
- Postgres 8.3
- .NET/Mono 2.4.4
PostgreSQL 8.3 supporta nativamente gli uuid. Il supporto è però dato da un modulo esterno (basato su libossp) ma comunque ufficialmente supportato. È quindi necessario installare il modulo sul sistema:
~# apt-get install postgresql-contrib-8.3 libossp-uuid15
Per poter sfruttare le nuove funzioni bisogna eseguire il codice SQL contenuto nel modulo. Il meccanismo di templating dei DB fa sì che un nuovo DB venga creato a partire (copiato) da dei DB predefiniti. Dovendo usare gli uuid spesso ho scelto di caricare le funzioni nel template predefinito template1 e poi creare i nuovi DB a partire da questo: tutti i DB creati usando template1 come template avranno a disposizioni il tipo di dato uuid e le funzioni associate.
postgres=#\connect template1
template1=#\i /usr/share/postgresql/8.3/contrib/uuid-ossp.sql
<id name="uuid_column" column="uuid_column" type="string" access="..."> <generator class="uuid.hex"> <param name="format">D</param> </generator> </id>
public virtual string uuid_column {
get { return _uuid_column; }
}
private string _uuid_column;
Per colonne che non sono chiave primaria è sufficiente usare il tipo di dato a string e impostare come politica di generazione insert: quando l'oggetto verrà salvato l'uuid sarà generato da PostgreSQL.
<property name="uuid_property" type="string" access="nosetter.lowercase-underscore" generated="insert"> <column name="uuid_proerty" /> </property>
La classe C# avrà come properietà una semplice string:
public virtual string uuid_property {
get { return _uuid_property; }
}
private string _uuid_property;