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

Hibernate no me hace el mapeo con objetos

Estas en el tema de Hibernate no me hace el mapeo con objetos en el foro de Java en Foros del Web. Buenas Tardes. Estoy realizando el mapeo de una base de datos en mysql, la cual solo contiene dos tablas, y el resultado es el siguiente: ...
  #1 (permalink)  
Antiguo 16/12/2014, 14:16
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Pregunta Hibernate no me hace el mapeo con objetos

Buenas Tardes.

Estoy realizando el mapeo de una base de datos en mysql, la cual solo contiene dos tablas, y el resultado es el siguiente:

Agencia.java
Código:
public class Agencia {
    int idAgencia;
    String nombre;
    String direccion;

    public Agencia(int idAgencia, String nombre, String direccion) {
        this.idAgencia = idAgencia;
        this.nombre = nombre;
        this.direccion = direccion;
    }
    
    public int getIdAgencia() {
        return idAgencia;
    }

    public void setIdAgencia(int idAgencia) {
        this.idAgencia = idAgencia;
    }

    public String getNombre() {
        return nombre;
    }

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

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
}
Automovil.java
Código:
public class Automovil {
    int idAutomovil;
    int idAgencia;
    String noSerie;
    String color;
    String marca;

    public Automovil(int idAutomovil, int idAgencia, String noSerie, String color, String marca) {
        this.idAutomovil = idAutomovil;
        this.idAgencia = idAgencia;
        this.noSerie = noSerie;
        this.color = color;
        this.marca = marca;
    }
    
    public int getIdAutomovil() {
        return idAutomovil;
    }

    public void setIdAutomovil(int idAutomovil) {
        this.idAutomovil = idAutomovil;
    }

    public int getIdAgencia() {
        return idAgencia;
    }

    public void setIdAgencia(int idAgencia) {
        this.idAgencia = idAgencia;
    }

    public String getNoSerie() {
        return noSerie;
    }

    public void setNoSerie(String noSerie) {
        this.noSerie = noSerie;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }
}
El problema es que lo quiero de la siguiente manera (omitire getters, setter y constructor para ahorrar espacio)

Agencia.java
Código:
public class Agencia {
    int idAgencia;
    String nombre;
    String direccion;
    private Set automoviles = new HashSet(0);
}
Automovil.java
Código:
public class Automovil {
    int idAutomovil;
    Agencia agencia;
    String noSerie;
    String color;
    String marca;
}
Quiero que el mapeo me entregue un objeto dentro del otro, no solo su id, sospecho que tengo que cambiar alguna configuracion de mysql, pero no estoy seguro que.

Agredezco mucho su ayuda.

Saludos
  #2 (permalink)  
Antiguo 16/12/2014, 15:07
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Hibernate no me hace el mapeo con objetos

Es imposible responder nada útil con la información que das.

¿Donde tienes la configuración de Hibernate? ¿Utilizas la implementación propietaria de Hibernate o la de JPA?. ¿Utilizas xml o anotaciones?

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 16/12/2014, 16:45
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

No proporcione toda la informacion porque no la crei necesaria para que se comprendiera que es lo que necesito, pero con gusto proporciono lo que sea necesario.

Este es mi archivo de configuracion de hibernate:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/pruebaagencia?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">pruebas</property>
    <property name="hibernate.connection.password">pass</property>
    <mapping resource="com/prueba/POJOs/Agencia.hbm.xml"/>
    <mapping resource="com/prueba/POJOs/Automovil.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
mi archivo de ingenieria inversa
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="pruebaagencia"/>
  <table-filter match-name="agencia"/>
  <table-filter match-name="automovil"/>
</hibernate-reverse-engineering>
Y utilizo hibernate con Xml's (no los coloco por el espacio que utilizan), si es necesario mas informacion la proporciono.

Si se entiende que es lo que necesito?

Muchas gracias por contestar, Saludos
  #4 (permalink)  
Antiguo 17/12/2014, 01:41
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Hibernate no me hace el mapeo con objetos

Buenas,

Estoy completamente de acuerdo en que esos ficheros con la configuracion de la conexion no aportan nada. A lo que me referia, por supuesto, era a la configuracion de los mapeos de Hibernate (hbm) o a las anotaciones, si las estabas utilizando en su lugar.
Para esas entidades tan sencillas no deberian ocupar mas de 20 lineas por lo que no entiendo que problema hay con el espacio.

Por otro lado, en el primer post no haces ninguna referencia, pero ahora parece que dices que generas las entidades automaticamente por ingenieria inversa. Que es entonces lo que necesitas?

-Saber como cambiar los mapeos (ficheros hbm) manualmente para incluir las relacciones one to many y many to one
O
-Saber como configurar el fichero de ingenieria inversa para que genere automaticamente los mapeos de las relaciones one to many y many to one.

??

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 17/12/2014, 14:06
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Buenas Tardes, Disculpa la Tardanza.

Mira, voy a ser un poco mas especifico.

Tengo 2 Computadoras, una MAC y una PC, las 2 tienen Mysql, la MAC tiene la version 5.6.14 y la PC la version 5.5.36, en las 2 maquinas cargo el siguiente Script

Código:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

DROP SCHEMA IF EXISTS `pruebaagencia` ;
CREATE SCHEMA IF NOT EXISTS `pruebaagencia` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `pruebaagencia` ;

-- -----------------------------------------------------
-- Table `pruebaagencia`.`Agencia`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `pruebaagencia`.`Agencia` (
  `idAgencia` INT NOT NULL AUTO_INCREMENT,
  `Nombre` VARCHAR(45) NULL,
  `Direccion` VARCHAR(45) NULL,
  PRIMARY KEY (`idAgencia`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `pruebaagencia`.`Automovil`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `pruebaagencia`.`Automovil` (
  `idAutomovil` INT NOT NULL AUTO_INCREMENT,
  `noSerie` VARCHAR(45) NULL,
  `color` VARCHAR(45) NULL,
  `marca` VARCHAR(45) NULL,
  `idAgencia` INT NOT NULL,
  PRIMARY KEY (`idAutomovil`),
  INDEX `fk_Automovil_Agencia_idx` (`idAgencia` ASC),
  CONSTRAINT `fk_Automovil_Agencia`
    FOREIGN KEY (`idAgencia`)
    REFERENCES `pruebaagencia`.`Agencia` (`idAgencia`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
Ahora, desde mi MAC usando Netbeans 7.3 hago el mapeo a dicha base de datos, obteniendo los siguentes archivos:

Archivo de configuracion (hibernate.cfg.xml):

Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/pruebaagencia?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">pruebas</property>
    <property name="hibernate.connection.password">pass</property>
    <mapping resource="com/prueba/Agencia.hbm.xml"/>
    <mapping resource="com/prueba/Automovil.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Archivo de ingenieria inversa(hibernate.reveng.xml):
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="pruebaagencia"/>
  <table-filter match-name="Agencia"/>
  <table-filter match-name="Automovil"/>
</hibernate-reverse-engineering>
POJOs
Agencia.java
Código:
package com.prueba;
// Generated 10-dic-2014 13:26:01 by Hibernate Tools 3.2.1.GA

/**
 * Agencia generated by hbm2java
 */
public class Agencia  implements java.io.Serializable {
     private Integer idAgencia;
     private String nombre;
     private String direccion;

    public Agencia() {
    }

    public Agencia(String nombre, String direccion) {
       this.nombre = nombre;
       this.direccion = direccion;
    }
   
    public Integer getIdAgencia() {
        return this.idAgencia;
    }
    
    public void setIdAgencia(Integer idAgencia) {
        this.idAgencia = idAgencia;
    }
    public String getNombre() {
        return this.nombre;
    }
    
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getDireccion() {
        return this.direccion;
    }
    
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
}
Agencia.hbm.xml
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 10-dic-2014 13:26:02 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.prueba.Agencia" table="Agencia" catalog="pruebaagencia">
        <id name="idAgencia" type="java.lang.Integer">
            <column name="idAgencia" />
            <generator class="identity" />
        </id>
        <property name="nombre" type="string">
            <column name="Nombre" length="45" />
        </property>
        <property name="direccion" type="string">
            <column name="Direccion" length="45" />
        </property>
    </class>
</hibernate-mapping>
Automovil.java
Código:
package com.prueba;
// Generated 10-dic-2014 13:26:01 by Hibernate Tools 3.2.1.GA

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

     private Integer idAutomovil;
     private String noSerie;
     private String color;
     private String marca;
     private int idAgencia;

    public Automovil() {
    }
	
    public Automovil(int idAgencia) {
        this.idAgencia = idAgencia;
    }
    public Automovil(String noSerie, String color, String marca, int idAgencia) {
       this.noSerie = noSerie;
       this.color = color;
       this.marca = marca;
       this.idAgencia = idAgencia;
    }
   
    public Integer getIdAutomovil() {
        return this.idAutomovil;
    }
    
    public void setIdAutomovil(Integer idAutomovil) {
        this.idAutomovil = idAutomovil;
    }
    public String getNoSerie() {
        return this.noSerie;
    }
    
    public void setNoSerie(String noSerie) {
        this.noSerie = noSerie;
    }
    public String getColor() {
        return this.color;
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    public String getMarca() {
        return this.marca;
    }
    
    public void setMarca(String marca) {
        this.marca = marca;
    }
    public int getIdAgencia() {
        return this.idAgencia;
    }
    
    public void setIdAgencia(int idAgencia) {
        this.idAgencia = idAgencia;
    }
}
Automovil.hbm.xml
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 10-dic-2014 13:26:02 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.prueba.Automovil" table="Automovil" catalog="pruebaagencia">
        <id name="idAutomovil" type="java.lang.Integer">
            <column name="idAutomovil" />
            <generator class="identity" />
        </id>
        <property name="noSerie" type="string">
            <column name="noSerie" length="45" />
        </property>
        <property name="color" type="string">
            <column name="color" length="45" />
        </property>
        <property name="marca" type="string">
            <column name="marca" length="45" />
        </property>
        <property name="idAgencia" type="int">
            <column name="idAgencia" not-null="true" />
        </property>
    </class>
</hibernate-mapping>
Todos esos son los archivos utilizados para Hacer el mapeo entre la MAC y la base de datos en su propio mysql.
De esta manera, como puedes ver, solo tengo los siguientes atributos en Agencia.java
Código:
private Integer idAgencia;
private String nombre;
private String direccion;
y los siguientes en Automovil.java
Código:
private Integer idAutomovil;
private String noSerie;
private String color;
private String marca;
private int idAgencia;
Pero esto no es lo que necesito, Ahora, en la misma MAC con el mismo netbeans hice el mapeo a la misma base de datos, pero ahora cargada en el mysql de la PC, y estos son los resultados (Siguiente POST):
  #6 (permalink)  
Antiguo 17/12/2014, 14:09
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Archivos Generados al Hacer el Mapeo desde la MAC, hacia la misma Base de datos, pero cargada en el Mysql de la PC:

Archivo de configuracion(hibernate.cfg.xml):
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://[IP_DE_LA_PC]:3306/pruebaagencia?zeroDateTimeBehavior=convertToNull</property>
    <property name="hibernate.connection.username">pruebas</property>
    <property name="hibernate.connection.password">pass</property>
    <mapping resource="com/prueba/Agencia.hbm.xml"/>
    <mapping resource="com/prueba/Automovil.hbm.xml"/>
  </session-factory>
</hibernate-configuration>
Archivo de ingenieria inversa (hibernate.reveng.xml):
Código:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
  <schema-selection match-catalog="pruebaagencia"/>
  <table-filter match-name="agencia"/>
  <table-filter match-name="automovil"/>
</hibernate-reverse-engineering>
POJOs
Agencia.java
Código:
package com.prueba;
// Generated 10-dic-2014 13:31:22 by Hibernate Tools 3.2.1.GA


import java.util.HashSet;
import java.util.Set;

/**
 * Agencia generated by hbm2java
 */
public class Agencia  implements java.io.Serializable {
     private Integer idAgencia;
     private String nombre;
     private String direccion;
     private Set automovils = new HashSet(0);

    public Agencia() {
    }

    public Agencia(String nombre, String direccion, Set automovils) {
       this.nombre = nombre;
       this.direccion = direccion;
       this.automovils = automovils;
    }
   
    public Integer getIdAgencia() {
        return this.idAgencia;
    }
    
    public void setIdAgencia(Integer idAgencia) {
        this.idAgencia = idAgencia;
    }
    public String getNombre() {
        return this.nombre;
    }
    
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getDireccion() {
        return this.direccion;
    }
    
    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }
    public Set getAutomovils() {
        return this.automovils;
    }
    
    public void setAutomovils(Set automovils) {
        this.automovils = automovils;
    }
}
Agencia.hbm.xml
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 17-dic-2014 13:31:22 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.prueba.Agencia" table="agencia" catalog="pruebaagencia">
        <id name="idAgencia" type="java.lang.Integer">
            <column name="idAgencia" />
            <generator class="identity" />
        </id>
        <property name="nombre" type="string">
            <column name="Nombre" length="45" />
        </property>
        <property name="direccion" type="string">
            <column name="Direccion" length="45" />
        </property>
        <set name="automovils" inverse="true">
            <key>
                <column name="idAgencia" not-null="true" />
            </key>
            <one-to-many class="com.prueba.Automovil" />
        </set>
    </class>
</hibernate-mapping>
Atomovil.java
Código:
package com.prueba;
// Generated 10-dic-2014 13:31:22 by Hibernate Tools 3.2.1.GA

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

     private Integer idAutomovil;
     private Agencia agencia;
     private String noSerie;
     private String color;
     private String marca;

    public Automovil() {
    }

	
    public Automovil(Agencia agencia) {
        this.agencia = agencia;
    }
    public Automovil(Agencia agencia, String noSerie, String color, String marca) {
       this.agencia = agencia;
       this.noSerie = noSerie;
       this.color = color;
       this.marca = marca;
    }
   
    public Integer getIdAutomovil() {
        return this.idAutomovil;
    }
    
    public void setIdAutomovil(Integer idAutomovil) {
        this.idAutomovil = idAutomovil;
    }
    public Agencia getAgencia() {
        return this.agencia;
    }
    
    public void setAgencia(Agencia agencia) {
        this.agencia = agencia;
    }
    public String getNoSerie() {
        return this.noSerie;
    }
    
    public void setNoSerie(String noSerie) {
        this.noSerie = noSerie;
    }
    public String getColor() {
        return this.color;
    }
    
    public void setColor(String color) {
        this.color = color;
    }
    public String getMarca() {
        return this.marca;
    }
    
    public void setMarca(String marca) {
        this.marca = marca;
    }
}
Automovil.hbm.xml
Código:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 17-dic-2014 13:31:22 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
    <class name="com.prueba.Automovil" table="automovil" catalog="pruebaagencia">
        <id name="idAutomovil" type="java.lang.Integer">
            <column name="idAutomovil" />
            <generator class="identity" />
        </id>
        <many-to-one name="agencia" class="com.prueba.Agencia" fetch="select">
            <column name="idAgencia" not-null="true" />
        </many-to-one>
        <property name="noSerie" type="string">
            <column name="noSerie" length="45" />
        </property>
        <property name="color" type="string">
            <column name="color" length="45" />
        </property>
        <property name="marca" type="string">
            <column name="marca" length="45" />
        </property>
    </class>
</hibernate-mapping>
De esta forma, los atributos quedan de la siguiente manera:

Agencia.java
Código:
private Integer idAgencia;
private String nombre;
private String direccion;
private Set automovils = new HashSet(0);
Automovil.java

Código:
private Integer idAutomovil;
private Agencia agencia;
private String noSerie;
private String color;
private String marca;
De esta forma es la que lo quiero mapear, solo que desde la misma mac, sin necesidad de cargar la base de datos en mysql de la PC.

Que es lo que necesito hacer?

Como comente en mi primer post, creo que tiene que ver con mysql, ya que es la unica variante entre los 2 mapeos, pero no se que cambiar.

A que se debe que al mapear en MAC con su propio mysql me entrega los POJOs de una forma, y al mapear desde la misma MAC, pero hacia Mysql en la PC (con Windows 7 y la misma base de datos que en la MAC), el resultado es diferente?

De antemano muchas gracias, y espero haber sido mas especifico, aun asi, cualquier duda la contestare.

Muchas gracias

Saludos
  #7 (permalink)  
Antiguo 17/12/2014, 14:53
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Hibernate no me hace el mapeo con objetos

No tengo ni idea de hibernate, pero es raro que apuntando a la misma estructura con el mismo fichero de configuración genere dos códigos distintos, pero no tiene ninguna importancia, los dos son válidos. ¿Qué más te da en qué máquina se ha generado el código? No necesitas crearlo en el mac y en el PC, con que los generes en uno te sirve.

Si es por curiosidad, prueba a instalar las dos versiones de mysql en el mac, así sabrás si la diferencia es por la versión o por estar en otra máquina. También puedes probar el otro sentido, comparar lo creado en el PC apuntando al PC y al mac.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #8 (permalink)  
Antiguo 17/12/2014, 17:12
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Gracias por tu respuesta Xerelo.

No me importa en que maquina se alla creado el codigo, se que los dos funcionan, la diferencia es la forma de trabajar, es mas facil manejar los objetos generados al mapear la BD de la PC, ya que tienen en sus atributos el objeto como tal y no solo el id, de esta forma es mas facil ir accesando a los objetos,

por ejemplo

si de una consulta obtengo un objeto Automovil, facilmente puedo accesar a su objeto Agencia y saber su nombre, y de la otra forma tendria que hacer una nueva consulta con el id obtenido para saber el nombre, si me entiendes?

ahora, tengo otras 2 MAC aqui, una con mysql 5.6.14 y otra con mysql 5.6.17, las cuales son superiores a la que tengo en windows(5.5.36) y he hecho varias pruebas y el resultado es el mismo.

si mapeo en la PC apuntando a la misma PC si me entega los objetos que necesito, pero apuntano a alguna MAC solo me entrega los id's, no el objeto completo, y cuanquiera de las MAC, mapeando la base de datos de la PC si me entrega el mapeo con objetos.

Espero me alla dado a entender

Alguna otra ssugerencia?

Muchas gracias

Saludos
  #9 (permalink)  
Antiguo 18/12/2014, 02:16
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Hibernate no me hace el mapeo con objetos

Buenas,

Ahora ya tenemos toda la informacion y se entiende tu duda.

Para mi una posible explicacion es que en una base de datos hayas definido la relaccion (clave foranea) entre las dos tablas y no lo hayas hecho en otra base de datos. De ahi la diferencia.
Normalmente los generadores de mapeo comprueban la claves foraneas y los joins a la hora de construir los mapeos many to one, one to many, many to many, etc

Puedes verficarlo?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #10 (permalink)  
Antiguo 18/12/2014, 10:33
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Hola Profesor_Falken, Buenos dias y gracias por tu respuesta

No, esa no es la causa, ya que cargue el mismo script que mostre en los dos equipos.

Describe en MAC:

Código:
mysql> describe Agencia
    -> ;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| idAgencia | int(11)     | NO   | PRI | NULL    | auto_increment |
| Nombre    | varchar(45) | YES  |     | NULL    |                |
| Direccion | varchar(45) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.10 sec)

mysql> describe Automovil
    -> ;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| idAutomovil | int(11)     | NO   | PRI | NULL    | auto_increment |
| noSerie     | varchar(45) | YES  |     | NULL    |                |
| color       | varchar(45) | YES  |     | NULL    |                |
| marca       | varchar(45) | YES  |     | NULL    |                |
| idAgencia   | int(11)     | NO   | MUL | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
5 rows in set (0.06 sec)
Describe en PC:
Código:
mysql> describe agencia
    -> ;
+-----------+-------------+------+-----+---------+----------------+
| Field     | Type        | Null | Key | Default | Extra          |
+-----------+-------------+------+-----+---------+----------------+
| idAgencia | int(11)     | NO   | PRI | NULL    | auto_increment |
| Nombre    | varchar(45) | YES  |     | NULL    |                |
| Direccion | varchar(45) | YES  |     | NULL    |                |
+-----------+-------------+------+-----+---------+----------------+
3 rows in set (0.93 sec)

mysql> describe automovil
    -> ;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| idAutomovil | int(11)     | NO   | PRI | NULL    | auto_increment |
| noSerie     | varchar(45) | YES  |     | NULL    |                |
| color       | varchar(45) | YES  |     | NULL    |                |
| marca       | varchar(45) | YES  |     | NULL    |                |
| idAgencia   | int(11)     | NO   | MUL | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
5 rows in set (0.12 sec)
ahora, no es eso, debido a que en los objetos creados a partir de la BD de la MAC si se ve la relacion, ya que Automovil si esta relacionado con agencia y el sus atributos contiene el id de la Agencia.
Agencia.java
Código:
private Integer idAgencia;
private String nombre;
private String direccion;
Automovil.java
Código:
private Integer idAutomovil;
private String noSerie;
private String color;
private String marca;
private int idAgencia;
Pero lo que necesito es que el mapeo no sea solo con el id, sino con todo el objeto, como lo hace al mapear la BD de la PC

Agencia.java
Código:
private Integer idAgencia;
private String nombre;
private String direccion;
private Set automovils = new HashSet(0);
Automovil.java
Código:
private Integer idAutomovil;
private Agencia agencia;
private String noSerie;
private String color;
private String marca;

Aulguna otra posible solucion?

Muchas gracias

Saludos
  #11 (permalink)  
Antiguo 19/12/2014, 01:40
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Hibernate no me hace el mapeo con objetos

Buenas,

Si dices que es el mismo script, la misma bbdd y las mismas versiones de bbdd y librerias, entonces la causa es dificil de determinar (imposible hacerlo a distancia).

En cualquier caso, que no sepamos la causa no quiere decir que no haya solucion. De hecho, es muy sencilla. Tan solo tienes que modificar los mapeos manualmente.

En Agencia.hbm.xml aniade el la lista de automobiles:
Código XML:
Ver original
  1. <set name="automovils" inverse="true">
  2.             <key>
  3.                 <column name="idAgencia" not-null="true" />
  4.             </key>
  5.             <one-to-many class="com.prueba.Automovil" />
  6.         </set>

Y en Automovil (Automovil.hbm.xml) aniade la agencia:
Código XML:
Ver original
  1. <many-to-one name="agencia" class="com.prueba.Agencia" fetch="select">
  2.             <column name="idAgencia" not-null="true" />
  3.         </many-to-one>

Reemplazando el id:
Código XML:
Ver original
  1. <property name="idAgencia" type="int">
  2.             <column name="idAgencia" not-null="true" />
  3.         </property>


Entonces ya podras dejar los beans como quieres:
Agencia.java

Código Java:
Ver original
  1. private Integer idAgencia;
  2. private String nombre;
  3. private String direccion;
  4. private Set automovils = new HashSet(0);


Automovil.java

Código Java:
Ver original
  1. private Integer idAutomovil;
  2. private Agencia agencia;
  3. private String noSerie;
  4. private String color;
  5. private String marca;

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #12 (permalink)  
Antiguo 19/12/2014, 10:36
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Buenos Dias Profesor_Falken

La MAC tiene MYSQL version 5.6.14 y la PC la version 5.5.36, son versiones direfentes, pero no solo he hecho la prueba con esas 2, sino tambien desde otras 2 MAC una con mysql 5.6.14 y otra con mysql 5.6.17 y los resultados son los mismos, la unica variante que veo es la version de mysql que me entrega los mapeos como los necesito, que es la PC con version 5.5.36, pero aun asi no creo que sea la version de Mysql como tal, sino mas bien creo que puede ser una configuracion, o una variable, pero no se cual, o como identificarla.

Para aclarar, los mapeos siempre los hago en el mismo equipo usando Netbeans 7.3 y la misma version de hibernate.

Se que el modificar los pojos ya creados es una solucion, pero no es lo que busco.

Mi problema real sale cuando quiero mapear una BD con mas de 50 o 100 tablas, lo que actualmente hago es mapear apuntando al equipo que me entrega los POJOs de la forma que yo quiero, pero es molesto, ya que por cada modificacion tengo que mapear de nuevo y es utilizar 2 equipos, lo que quiero es mapear en el mismo equipo de manera que me entregue los pojos de la forma que quiero, ya que la opcion que me comentas al tener 50 tablas no es viable.

Muchas gracias, cualquier sugerencia es bien recibida

Saludos
  #13 (permalink)  
Antiguo 19/12/2014, 10:49
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Hibernate no me hace el mapeo con objetos

Buenas,

Cita:
Mi problema real sale cuando quiero mapear una BD con mas de 50 o 100 tablas
O_o En cada post me entero de algo nuevo.

En ese caso prueba a jugar con las propiedades de configuracion.
https://docs.jboss.org/hibernate/orm...iguration.html

Especialmente con:
hibernate.default_schema
hibernate.default_catalog


Aqui, por ejemplo, hay una persona con un problema aparentemente similar (no le cogia las claves foraneas) que lo soluciono tocando dichas propiedades:
http://stackoverflow.com/questions/7...oesnt-generate

Suerte y un saludo
__________________
If to err is human, then programmers are the most human of us
  #14 (permalink)  
Antiguo 19/12/2014, 11:05
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Gracias Profesor_Falken

Se que es algo nuevo, pero la idea es la misma que en primer post, voy a revisar y comento los resultados

Muchas gracias

Saludos
  #15 (permalink)  
Antiguo 19/12/2014, 11:59
 
Fecha de Ingreso: octubre-2014
Mensajes: 29
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Hibernate no me hace el mapeo con objetos

Ya realice la prueba, mi archivo hibernate.cfg.xml quedo de la siguiente manera:

Código XML:
Ver original
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  3. <hibernate-configuration>
  4.   <session-factory>
  5.     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
  6.     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
  7.     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/pruebaagencia?zeroDateTimeBehavior=convertToNull</property>
  8.     <property name="hibernate.connection.username">pruebas</property>
  9.     <property name="hibernate.connection.password">pass</property>
  10.     <property name="hibernate.default_schema">pruebaagencia</property>
  11.     <property name="hibernate.default_catalog">Agencia</property>
  12.     <mapping resource="com/prueba/Agencia.hbm.xml"/>
  13.     <mapping resource="com/prueba/Automovil.hbm.xml"/>
  14.   </session-factory>
  15. </hibernate-configuration>

probe tambien con
Código XML:
Ver original
  1. <property name="hibernate.default_catalog">Automovil</property>

y los resltados son los mismos.

no lo configure correctamente?

No se me ocurre por donde mas buscar

Gracias

Saludos

Etiquetas: hibernate, mysql
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 06:14.