Foros del Web » Programación para mayores de 30 ;) » Java »

relacion de tablas hibernate

Estas en el tema de relacion de tablas hibernate en el foro de Java en Foros del Web. Buen dia a todos expongo mi siguiente duda acerca de la relacion de tablas usando hibernate y es la siguiente: tengo la tabla usuarios que ...
  #1 (permalink)  
Antiguo 23/11/2011, 10:24
 
Fecha de Ingreso: agosto-2011
Ubicación: d.f
Mensajes: 283
Antigüedad: 12 años, 7 meses
Puntos: 4
relacion de tablas hibernate

Buen dia a todos expongo mi siguiente duda acerca de la relacion de tablas usando hibernate y es la siguiente:

tengo la tabla usuarios que tiene las siguiente propiedades:

Código PHP:
idUsuarios
nombre
apellidos
usuario
clave
fk_idperfil 
y tengo la tabla perfil que tengo las siguientes propiedades:

Código PHP:
idperfil
tipoPerfil 
como podran ver la pk de la tabla perfil me la llevo a la tabla usuarios, de aqui surgen varias preguntas:

1.- ¿que me conviene usar los xml que genero con los plug in de hibernate o usar las anotaciones de jpa?

2.-¿la relacion de tablas como seria en codigo ya sea usando xml o anotaciones de jpa-?, no entiendo esto la vdd de hacer las relaciones entre tablas.

3.- Por ultimo como fregados le hago para recuperar datos de ambas tablas ya que si hago un query usando JDBC seria algo asi:

Código PHP:
select nombre,a_paterno,a_materno,usuario,clave,tipoperfil from usuarios inner join perfil on idperfil=fk_idperfil where usuario=? and clave=? 
que como ven estas propiedades les hago set a un objeto que tenga dichas propiedades, pero usando hibernate no logro comprender esto, ¿tendria que crear una clase con las propiedades de ambas tablas para recuperarlas? ya que lo que entiendo de hibernate cada clase es una tabla con las propiedades que tiene esa tabla como variables en la clase....

espero haberme explicado y cualquiera ayuda desde una vez muchas gracias!!
  #2 (permalink)  
Antiguo 23/11/2011, 10:40
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: relacion de tablas hibernate

Cita:
1.- ¿que me conviene usar los xml que genero con los plug in de hibernate o usar las anotaciones de jpa?
Esta parte es mas una decisión personal que otra cosa. Lo que debes tener en cuenta es que, al usar archivos XML, nunca tendrás que tocar el código fuente de las entidades. Sin embargo, al usar anotaciones, para hacer un cambio tienes que editar la clase de la entidad, pero las anotaciones tienen la ventaja de que si decides usar otro framework que use las especificaciones establecidas en EJB3, para que funcionen tus entidades no cambiaras nada.

Si usaras XML's, al pasarte a otro framework, digamos, iBATIS, debes crear nuevos archivos XML. Con anotaciones la configuracion es MUY minima (solo definir las clases anotadas y los datasources).

Cita:
2.-¿la relacion de tablas como seria en codigo ya sea usando xml o anotaciones de jpa-?, no entiendo esto la vdd de hacer las relaciones entre tablas.
Con archivos XML no recuerdo, ya que no los utilizo tanto. Con anotaciones hay 4 tipos de relaciones que puedes hacer:
@OneToMany = Uno a muchos 1:n
@ManyToMany = Muchos a muchos n:m
@ManyToOne = Muchos a uno n:1
@OneToOne = Uno a uno 1:1

Antes de definir una relación, debes hacerte unas preguntas:
¿Puede un usuario tener varios tipos de perfiles?
¿Puede un mismo tipo de perfil pertenecer a mas de un usuario?

Para "no y no" = @OneToOne = Uno a uno
Un solo usuario solo puede tener un perfil y un perfil no puede pertenecer a varios usuarios
Para "si y no" = @OneToMany (desde el punto de vista del usuario) = Uno a muchos
Un usuario puede tener varios perfiles pero un perfil solo puede pertenecer a un usuario
Para "si y si" = @ManyToMany = Muchos a muchos
Un usuario puede tener varios perfiles y un perfil puede pertenecer a varios usuarios
Para "no y si" = @ManyToOne = Muchos a uno (desde el punto de vista del usuario)
Un perfil puede pertenecer a varios usuarios pero el usuario solo puede tener 1 perfil

Cita:
3.- Por ultimo como fregados le hago para recuperar datos de ambas tablas ya que si hago un query usando JDBC seria algo asi:
Depende de tus necesidades. Usualmente se obtiene una Session de Hibernate del SessionFactory y se hace una consulta usando find().
Tambien puedes usar Criteria o hacer consultas JPA.

Este tema es mucho mas extenso y requiere mucha mas indagacion por lo que no te puedo poner un ejemplo "facil".
  #3 (permalink)  
Antiguo 23/11/2011, 10:54
 
Fecha de Ingreso: agosto-2011
Ubicación: d.f
Mensajes: 283
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: relacion de tablas hibernate

Te agradezco tus oportunas respuestas Ronruby me has aclarado dudas que tenia pero me quedo una mas es la siguiente:

y es de la 3era pregunta, Por ultimo como fregados le hago para recuperar datos de ambas tablas ya que si hago un query usando JDBC seria algo asi:

Código PHP:
select nombre,a_paterno,a_materno,usuario,clave,tipoperfil from usuarios inner join perfil on idperfil=fk_idperfil where usuario=? and clave=? 
que como ven estas propiedades les hago set a un objeto que tenga dichas propiedades, pero usando hibernate no logro comprender esto, ¿tendria que crear una clase con las propiedades de ambas tablas para recuperrlas? (esa pregunta me queda) ya que lo que entiendo de hibernate cada clase es una tabla con las propiedades que tiene esa tabla como variables en la clase....
  #4 (permalink)  
Antiguo 23/11/2011, 11:03
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: relacion de tablas hibernate

Un ejemplo utilizando Criteria:

Código Javascript:
Ver original
  1. currentSession().beginTransaction();
  2.        
  3. Criteria search = currentSession().createCriteria(Usuario.class);
  4.  
  5. search.add(Restrictions.eq("usuario", "fulano"));
  6. search.add(Restrictions.eq("clave", "valor recuperado"));
  7. search.setMaxResults(1);
  8.  
  9. user = (Usuario) search.uniqueResult();
  10. currentSession().getTransaction().commit();

Donde el metodo currentSession() me devuelve una Session de Hibernate.

Clavo, obviamente donde dice: "fulano" y "valor recuperado" debes tener el usuario y contraseña de la persona. Eso ya decides tu como recuperarlo.

Con JPA seria algo mas o menos como:
Código Javascript:
Ver original
  1. em.createQuery("FROM Usuario u WHERE u.usuario = :usuario u.clave = :clave").setParameter("usuario", "fulano").setParameter("clave", "valor recuperado");
Donde em es una instancia de EntityManager.
  #5 (permalink)  
Antiguo 23/11/2011, 11:50
 
Fecha de Ingreso: agosto-2011
Ubicación: d.f
Mensajes: 283
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: relacion de tablas hibernate

Agradezco tu respuesta!!
  #6 (permalink)  
Antiguo 23/11/2011, 12:16
 
Fecha de Ingreso: agosto-2011
Ubicación: d.f
Mensajes: 283
Antigüedad: 12 años, 7 meses
Puntos: 4
Respuesta: relacion de tablas hibernate

Ok Ronruby me decidi a usar las anotaciones de JPA, pero necesito tu ayuda por favor: tengo las dos tablas en mi bd que uso Mysql, la primera tabla tienes las siguiente propiedades:

USUARIOS:

Código PHP:

idUsuarios 
nombre 
apellidos 
usuario 
clave 
fk_idperfil 

tabla PERFIL

Código PHP:
idperfil 
tipoPerfil 
que como puedes ver la llave de la tabla perfil me la estoy llevando como fk a la tabla usuarios osea mi relacion es de muchos a uno.

como podria hacer esta relacion de tablas usando Clases en java

Etiquetas: hibernate, relacion, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:49.