Hola gente,
Les quiero hacer una consulta.
Actualmente estoy creando la base de datos con SchemaExport a partir de los archivos de mapeo, y me encuentro con un problema...
Para explicarles un poco el dominio...
Existen las entidades Template y Report que pueden ser taggeadas... (se le puede poner una palabra que ayude a identificarlos...)
Entonces, además de tener una tabla para Templates y otra para Reports, tengo una tabla "Tag" y luego una tablas "TemplateTags" y "ReportTags" que hacen referencia a los Tags y a un Template o un Report respectivamente.
Entonces, los tags son colecciones Many-to-Many.
Los ids de las tablas Template y Report son CHAR(36) especificados con sql-type.
El tema es que SchemaExport crea bien las tablas Template, Report, Tag y ReportTags (especificando bien el tipo de dato de ReportId a CHAR(36), como lo especifica el archivo de mapeo), pero no pasa lo mismo con TemplateTags... ya que templateId lo deja en VARCHAR(255) como lo hace con cualquier String por defecto, sin tener en cuenta lo que especifiqué el la parte de "column" del hbm....
El problema que trae esto, es que en algunos Motores de Base de Datos no se puede crear un Foreign Key si no es del mismo tipo de dato... como pasa en SQL Server (con MySQL y PostgreSQL no pasa nada). Entonces, la creación de las tablas termina fallando...
Saben por qué es que no crea bien la tabla TemplateTags, cuando ReportTags sí la hace bien (veo los mapeos iguales...)??
Les copio abajo el hbm de los tags y la parte de Template y Report...
El archivo de mapeo de los Tags...
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Namespace.TagInfo, Namespace" table="tags" lazy ="false">
<id
name="TagID"
type ="int"
column="tagID">
<generator class="native"></generator>
</id>
<property
name="Name"
column="name"/>
<property
name="Rank"
column="rank"/>
<set
name="ITemplate"
inverse="true"
table ="templatetags"
lazy="false">
<key column ="tag" />
<many-to-many class="Namespace.TemplateInfo, Namespace">
<column name="templateId"
sql-type="char(36)" />
</many-to-many>
</set>
<set
name="IReport"
inverse="true"
table ="reporttags"
lazy="false">
<key column ="tag" />
<many-to-many class="Namespace.ReportInfo, Namespace">
<column name="reportId"
sql-type="char(36)" />
</many-to-many>
</set>
</class>
</hibernate-mapping>
La parte de Template que hace referencia a los tags y el Id especificando el sql-type
<id
name="TemplateUID"
type="string">
<column name="templateUID"
sql-type="char(36)" />
<generator class ="assigned" />
</id>
<set
name="ITag"
table ="templatetags"
cascade="save-update"
lazy="false">
<key column ="templateId"/>
<many-to-many class="Namespace.TagInfo, Namespace" column ="tag"/>
</set>
La parte de Report con lo mismo...
<id
name="ReportUID"
type ="string">
<column name="reportUID"
sql-type="char(36)" />
<generator class ="assigned" />
</id>
<set
name="ITag"
table ="reporttags"
cascade ="save-update"
lazy="false">
<key column="reportId"/>
<many-to-many class="Namespace.TagInfo, Namespace" column ="tag"/>
</set>
Cualquier cosa, si no fui muy claro... trato de abstraerlo un poco más o detallar más...
Gracias!
Salu2,
Juan
Para escribir al Grupo, hágalo a esta dirección: NHibernate-Hispano <at> googlegroups.com