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.