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

Hibernate

Estas en el tema de Hibernate en el foro de Java en Foros del Web. Hola amigos, estoy realizando un aplicacion de hibernate de ejemplo y tengo un problema con la Herencia, la estoy realizando con la forma un tabla ...
  #1 (permalink)  
Antiguo 17/10/2009, 17:17
 
Fecha de Ingreso: marzo-2009
Mensajes: 76
Antigüedad: 15 años, 1 mes
Puntos: 1
Hibernate

Hola amigos, estoy realizando un aplicacion de hibernate de ejemplo y tengo un problema con la Herencia, la estoy realizando con la forma un tabla por subclase.
La insercion me funciona perfecto pero cuando quiero recuperar los contadores, no me devuelve nada.

En cuanto a las tablas he probado los EmpleadoId es PK , y tambien probe con que en la tabla contadores el EmpleadoId sea FK apuntando a EmpleadoId de Empleados, bueno espero que se entienda.

Tampoco se si tengo que tener algo en especial en el archivo de configuracion de Hibernate, bueno les muestos los respectivos archivos:


hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http:---//....hibernate.sourceforge....dasnet/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MyS QLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql .jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/Ejemplo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">toor</property>
<property name="show_sql">true</property>

<mapping resource="ClasesYMapeos/Empleados.hbm.xml"/>
<mapping resource="ClasesYMapeos/Contadores.hbm.xml"/>
</session-factory>
</hibernate-configuration>


Paso a mostrarles los diferentes archivos:

Archivo de mapeo de Empleado.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http.......://......hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 14-oct-2009 18:49:38 by Hibernate Tools 3.2.1.GA polymorphism="implicit"-->
<hibernate-mapping>
<class catalog="escuela" name="ClasesYMapeos.Empleado" table="empleados">

<id name="empleadoId" column="EmpleadoID">
<generator class="identity"/>
</id>

<property name="nombre" type="string">
<column length="45" name="Nombre" not-null="true"/>
</property>
<property name="apellido" type="string">
<column length="45" name="Apellido" not-null="true"/>
</property>

<joined-subclass name="ClasesYMapeos.Contador" table="Contadores">
<key column="EmpleadoId"/>
<property column="Sector" name="Sector" type="java.lang.String"/>
</joined-subclass>
</class>
</hibernate-mapping>



Clase Empleado
package ClasesYMapeos;
// Generated 14-oct-2009 18:49:36 by Hibernate Tools 3.2.1.GA

/**
* Empleados generated by hbm2java
*/
public class Empleado implements java.io.Serializable {


private int empleadoId;
private String nombre;
private String apellido;

public Empleado() {
}

public Empleado(int empleadoId, String nombre, String apellido) {
this.empleadoId = empleadoId;
this.nombre = nombre;
this.apellido = apellido;
}

public int getEmpleadoId() {
return this.empleadoId;
}

public void setEmpleadoId(int empleadoId) {
this.empleadoId = empleadoId;
}
public String getNombre() {
return this.nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return this.apellido;
}

public void setApellido(String apellido) {
this.apellido = apellido;
}
}

Clase Contador
Package ClasesYMapeos;

public class Contador extends Empleado implements java.io.Serializable{


private int empleadoId;
private String sector;

public Contador() {
}

public Contador(String sector) {
this.sector = sector;
}


public int getEmpleadoId() {
return this.empleadoId;
}

public void setEmpleadoId(int empleadoId) {
this.empleadoId = empleadoId;
}

public String getSector() {
return this.sector;
}

public void setSector(String sector) {
this.sector = sector;
}

}

Clase ServiciosContadores

package Servicios;

/* Clases Que Realizamos */
import ClasesYMapeos.Contador;
import HibernateUtil.MySessionFactory;
/* Java util */
import java.util.List;
/* Las clases necesarias pra trabajar con Hibernate */
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class ServiciosContadores {

public boolean newContador(Contador unContador) {
boolean creado = false;
Session session = MySessionFactory.getSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
session.save(unContador);
tx.commit();
creado = true;
}catch(HibernateException he){
if(tx!=null) tx.rollback();
System.out.println(he.getMessage());
}finally{
session.close();
}
return creado;
}

ESTE ES EL METODO QUE NO ME RECUPERA NADA, No CREO QUE EL PROBLEMA SEA ESTE, PERO BUENO SE LOS RECALCO POR LAS DUDAS.
public List<Contador> listCont(){
/* Iniciamo y tomamos la instancia de la session */
Session miSession = MySessionFactory.getSession();
Transaction tx = null;
List<Contador> contadores = null;

try{
miSession.beginTransaction();
/* Realizamos la consulta en HQL */
String hql = "FROM Contador";
Query q = miSession.createQuery(hql);
contadores = q.list(); /* retornamos una lista de categorias */
return contadores;
}catch(HibernateException he){
/* si pasa algun errro volvemos atrar la tansaccion */
if(tx!=null) tx.rollback();
}finally{
miSession.close();
return contadores; /* Pueder ser NULL o una lista de Categorias */
}
}
}

Puse para ver que me muestre las consultas SQL y cuando ingreso una contador me muestra esto

Hibernate: insert into escuela.empleados (Nombre, Apellido) values (?, ?)
Hibernate: insert into contadores (Sector, EmpleadoID) values (?, ?)

todo perfecto como se llaman los campos.

Pero cuando quiero recuperar la consulta SQL que me muestra es:

select contador0_.EmpleadoID as EmpleadoID0_, contador0_1_.Nombre as Nombre0_, contador0_1_.Apellido as Apellido0_, contador0_.Sector as Sector1_ from contadores contador0_ inner join escuela.empleados contador0_1_ on contador0_.EmpleadoID=contador0_1_.EmpleadoID

Todos esos nombre raros, espero que me puedan ayudar, ya no se que mas probrar.

Y me dice lo siguiente: GRAVE: Unknown column 'contador0_1_.EmpleadoID' in 'on clause'


Bueno mas datos no tengo para dar, si no encuentran la solucion.

ALGUIEN ME PUEDE RESPONDER CON ALGUN EJEMPLO DE HERENCIA, como para ver si lo puedo hacer de alguna manera, muchas grcias

Saludos y gracias.

NicoStone.
  #2 (permalink)  
Antiguo 29/07/2010, 15:21
 
Fecha de Ingreso: abril-2007
Mensajes: 2
Antigüedad: 17 años
Puntos: 0
Respuesta: Hibernate

//debe ser global para toda la clase
Session miSession = MySessionFactory.getSessionFactory().openSession() ;
public List listCont(){

Transaction tx = miSession.beginTransaction();
List<Contador> contadores = null;
try{
/* Realizamos la consulta en HQL */
String hql = "FROM Contador";
Query q = miSession.createQuery(hql);
contadores = (List<Contador>)q.list();
}catch(HibernateException he){
/* si pasa algun errro volvemos atrar la tansaccion */
tx.rollback();
}
return contadores;
}
  #3 (permalink)  
Antiguo 29/07/2010, 21:03
Avatar de FiruzzZ  
Fecha de Ingreso: diciembre-2007
Ubicación: en casa
Mensajes: 470
Antigüedad: 16 años, 4 meses
Puntos: 41
Respuesta: Hibernate

¿para qué hacer un rollback() cuando hacés SELECT?
En todo, mejor mostrá la Exception, así vas a saber que pasó, para mi que no concuerda tu mapeo con tu Entitad..
PD: prefiero @Annotations
__________________
BadProgrammerException!

Última edición por FiruzzZ; 29/07/2010 a las 21:09
  #4 (permalink)  
Antiguo 30/07/2010, 07:11
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Hibernate

Cita:
Iniciado por FiruzzZ Ver Mensaje
¿para qué hacer un rollback() cuando hacés SELECT?
En todo, mejor mostrá la Exception, así vas a saber que pasó, para mi que no concuerda tu mapeo con tu Entitad..
PD: prefiero @Annotations

Exacto, no estas haciendo bien la relacion de tablas, es decir, tu mapeo de Contadores probablemente esta mal.

Porque no utilizas las relaciones <one-to-many> o <many-to-one> ?

Aqui hay unos ejemplos:
http://www.forosdelweb.com/f45/hibernate-609209/


http://www.forosdelweb.com/f45/many-...ernate-616705/

Saludos!
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 19:39.