lunes, 6 de abril de 2009

Nhibernate: Composite Key

Después de meses creando una clase separada para definir la llave compuesta, nos percatamos que esto no es necesario, y la podemos crear en la misma clase. Para que no nos vuelva a ocurrir posteo el ejemplo:

Tabla:
TABLA_COMPUESTA

LLAVE1 (NUMBER)
LLAVE2 (NUMBER)
DESC (VARCHAR2)
OBS (VARCHAR2)

Mapping:
TablaCompuesta.hbm.xml

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="true">
<class name="ProjectEntities.TablaCompuesta, ProjectEntities" table="TABLA_COMPUESTA">
<composite-id>
<key-property name="llave1" column="llave1" type="Int32"/>
<key-property name="llave2" column="llave2" type="Int32"/>
</composite-id>
<property name="desc" column="desc" type="String"/>
<property name="obs" column="obs" type="String"/>
</class>

Clase:
TablaCompuesta.vb

Public Class TablaCompuesta

Private _llave1 Int32
Private _llave2 As Int32
Private _desc As String
Private _obs As String

Public Overridable Property llave1() As Int32
Get
Return Me._llave1
End Get
Set(ByVal value As Int32
Me._llave1 = value
End Set
End Property

Public Overridable Property llave2() As Int32
Get
Return Me._llave2
End Get
Set(ByVal value As Int32)
Me._llave2 = value
End Set
End Property

Public Overridable Property desc() As String
Get
Return Me._desc
End Get
Set(ByVal value As String)
Me._desc = value
End Set
End Property

Public Overridable Property obs() As String
Get
Return Me._obs
End Get
Set(ByVal value As String)
Me._obs = value
End Set
End Property

Public Overrides Function Equals(ByVal obj As Object) As Boolean
Return MyBase.Equals(obj)
End Function

Public Overrides Function GetHashCode() As Integer
Return MyBase.GetHashCode
End Function
End Class