Hola!

Registrándote como bakuno podrás publicar, compartir y comunicarte en privado con otros bakuos :D

Regístrame ya!

Necesito Ayuda! Hibernate y relaciones :/

wazusahdII

Becerro
Desde
14 Jul 2012
Mensajes
23
Qué tal bakunos, espero se encuentren bien.
Actualmente estoy desarrollando una pequeña aplicación donde tengo la necesidad de utilizar Hibernate.
Bueno, para no hacer las cosas tan largas y esperando ser claro, mi problema es a la hora de las relaciones, en mi caso uno a uno y uno a muchos, explicaré:
En la red, encontré el clásico ejemplo de: Persona y dirección donde persona posee sólo una dirección, esto es, Persona contiene un atributo de tipo Direccion...

(Código en Java)
public class Persona{
private Direccion direccion;
private String nombre;
/*
Constructor y demás.....
*/
}

public class Direccion{

private String direccion;

/*
Constructor y demás...
*/
}

Y el archivo de mapeo de Persona sería:
<hibernate-mapping>
<class name="Persona" table="PERSONA">
<id name="id" column="idPersona">
<generator class="foreign">
<param name="property">direccion</param>
</generator>
</id>
<property name="nombre" />
<one-to-one name="direccion" cascade="persist, delete"/>
</class>
</hibernate-mapping>


Lo copié, corrí, inserté, eliminé y todo bien; al insertar un objeto tipo persona, automáticamente se inserta la información en la tabla dirección etc.
Pero supongamos que persona también posee un atributo llamado mascota:

public class Mascota{
private String nombre;
private String tipo;

/*
Constructor y demás
*/
}

quedando la clase persona así:
public class Persona{
private Direccion direccion;
private Mascota mascota;
private String nombre;
/*
Constructor y demás.....
*/
}

Cómo quedaría el archivo de mapeo? Cómo relaciono un objeto (En este caso persona) con otros cuantos (En este caso dirección y mascota)?. Porque en el ejemplo de Persona y Dirección, el objeto persona sólo se relaciona con otro objeto, y en mi aplicación mi objeto A necesito relacionarlo con al menos 5 objetos más, lo intenté pero sólo me respeta la ultima relación codificada en el ".hbm.xml"

<hibernate-mapping>
<class name="Controlador.Paciente.Paciente" table="Pacientes">
<id name="idPaciente" column="IDPaciente">
<generator class="foreign">
<param name = "property">correo</param>
<param name = "property">tratamiento</param>
<param name = "property">registroCitas</param>
<param name = "property">telefono</param> <!-- Sólo me respeta esta relación, las anteriores (correo, tratamiento etc) no las respeta-->
</generator>
</id>
<property name= "nombre" />
<property name = "apellidoP"/>
<property name = "apellidoM"/>
<property name = "edad"/>
<property name = "fechaN"/>
<property name = "domicilio"/>
<one-to-one name="telefono" cascade="persist, delete"/>
<one-to-one name="correo" cascade="persist, delete"/>
<property name = "fechaRegistro"/>
<one-to-one name="tratamiento" cascade="persist, delete"/>
<list name="pagos" cascade="all-delete-orphan">
<key column="IDPaciente" />
<index column="ORDEN" />
<one-to-many class="Controlador.Pago.Pago" />
</list>
<one-to-one name="registroCitas" cascade="persist, delete"/>
</class>
</hibernate-mapping>

En resumen, mi pregunta es: Cómo relaciono un Objeto A con más de 1 objeto B, C, D etc...

Espero ser claro y haberme explicado bien, de lo contrario pueden dejar un comentario y con gusto busco la manera de explicarme mejor.
Muchas gracias por su tiempo y ayuda.
 
No tengo un proyecto a la mano en esta pc para darte alguna referencia o ejemplo, mañana vuelvo a postear en este tema, lo que te puedo adelantar es que lo más sencillo, es comenzar por definir tu modelo ER en tu BD, si ya tienes tus tablas creadas y sus relaciones entre sí, lo más sencillo es que se autogenere el código de hibernate para tu aplicación, tanto con Netbeans como con Eclipse+plugin es muy sencillo y hay bastante material en la red. En lo personal me parece más sencillo con Netbeans, pero es cuestión de gustos. De esa manera te libras de estar codificando el xml a mano, y si tu interés es aprender, puedes analizarlo ya a sabiendas de que ese código si funciona.
Saludos
 
Volver
Arriba