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

Hibernate no me crea las tablas

Estas en el tema de Hibernate no me crea las tablas en el foro de Java en Foros del Web. Buenas, no se que hacer para que Hibernate me cree las tablas automáticamente. Quiero hacer esta relación: Estudiante (n) -> (1) Pais. Muchos estudiantes pueden ...
  #1 (permalink)  
Antiguo 27/05/2011, 18:56
 
Fecha de Ingreso: diciembre-2007
Mensajes: 135
Antigüedad: 16 años, 10 meses
Puntos: 1
Hibernate no me crea las tablas

Buenas, no se que hacer para que Hibernate me cree las tablas automáticamente.
Quiero hacer esta relación: Estudiante (n) -> (1) Pais. Muchos estudiantes pueden pertenecer a un mismo país.
Pongo mi código para ver si veis algo mal:

Estudiante.class

Cita:

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.CascadeType;
import javax.persistence.ManyToOne;
import javax.persistence.GenerationType;

@Entity
@Table(name = "ESTUDIANTE")
public class Estudiante {

private long id_estudiante;
private Pais pais_estudiante;


@Id
@GeneratedValue (strategy = GenerationType.AUTO)
@Column(name = "ID_Estudiante")
public long getIdEstudiante() {
return this.id_estudiante;
}

public void setIdEstudiante(long id_estudiante) {
this.id_estudiante = id_estudiante;
}


@ManyToOne(cascade = CascadeType.ALL)
public Pais getPaisEstudiante() {
return this.pais_estudiante;
}

public void setPaisEstudiante(Pais pais_estudiante) {
this.pais_estudiante = pais_estudiante;
}

}
Pais.class

Código:
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "Pais")
public class Pais {
	
	private long id_pais;
	private String nombre_pais;
	
	
	public Pais(){
	}
	
	public Pais(String pais){
		nombre_pais=pais;
		
	}
	@Id
	@GeneratedValue
	@Column(name = "ID_Pais")
	public long getIdPais() {
		return this.id_pais;
	}
	
	public void setIdPais(long id_pais) {
		this.id_pais = id_pais;
	}
	
	
	@Column(name = "Nombre_Pais", nullable = false, length=250)
	public String getNombrePais() {
		return this.nombre_pais;
	}
	 
	public void setNombrePais(String nombre_pais) {
		this.nombre_pais = nombre_pais;
	}	

}
Código de configuración de Hibernate:

Código:
	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost/Proyecto"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
	</bean>
	
	<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="myDataSource" />
		<property name="annotatedClasses">
			<list>
		<value>com.domain.Estudiante</value>				       <value>com.domain.Pais</value>						
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.hbm2ddl.auto">create</prop>
			</props>
		</property>
	</bean>
No se que he puesto mal... en <prop key="hibernate.hbm2ddl.auto">create</prop> también probé poniendo en vez que "create" "update" y nada.

Aprovecho para preguntar, ¿cómo puedo acceder desde Java a la propiedad "nombre_pais" de la clase "Pais"? Tengo entendido que con Hibernate no hay que hacer Joins con sentencias sql, que puedes hacer el join tratando con objetos, algo como estudiante.pais[0] o algo así, ¿alguien me lo puede aclarar?


Muchas gracias


Un saludo
  #2 (permalink)  
Antiguo 30/05/2011, 08:58
 
Fecha de Ingreso: diciembre-2010
Mensajes: 459
Antigüedad: 13 años, 11 meses
Puntos: 21
Respuesta: Hibernate no me crea las tablas

Hola, de hibernate no se mucho, pero he visto algo de jpa, y las relacioens entre las tablas me las hacia directamente a traves de las entity class pero claro las tablas lo creaba en mysql, asegurate que tienes el conector y aki te falta el puerto creo

<property name="url" value="jdbc:mysql:3306//localhost/Proyecto"/>
<property name="username" value="root"/>
<property name="password" value="root"/>

Saludos

Última edición por sirdaiz; 31/05/2011 a las 01:36
  #3 (permalink)  
Antiguo 31/05/2011, 03:02
 
Fecha de Ingreso: mayo-2011
Mensajes: 79
Antigüedad: 13 años, 5 meses
Puntos: 14
Respuesta: Hibernate no me crea las tablas

Buenos días, Si estas usando MYSQL como base de datos, asegurate que en:

<prop key="hibernate.dialect">org.hibernate.dialect.HSQL Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">create</prop>

El dialecto es el correspondiente a MYSQL y no otro.

Saludos
__________________
Web Admin:
http://www.coretec.es
Tutoriales, Noticias y Recursos Liferay y J2EE
  #4 (permalink)  
Antiguo 31/05/2011, 08:00
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Hibernate no me crea las tablas

Asi mismo como expone harkonen.

Estas definiendo un datasource para MySQL pero estas usando el dialect de HSQL

Debe ser uno de los siguientes dependiendo de tu tipo de tablas:
MySQL = org.hibernate.dialect.MySQLDialect
MySQL with InnoDB = org.hibernate.dialect.MySQLInnoDBDialect
MySQL with MyISAM = org.hibernate.dialect.MySQLMyISAMDialect
  #5 (permalink)  
Antiguo 16/06/2011, 14:51
 
Fecha de Ingreso: diciembre-2007
Mensajes: 135
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hibernate no me crea las tablas

Gracias a todos.

Es InnoDB, ya he probado utilizando org.hibernate.dialect.MySQLInnoDBDialect pero no funciona.

Bueno, puedo crear las tablas a mano, tampoco me cuesta tanto trabajo, las relaciones no se si funcionan, porque no se como probar que funcionen, pero hay otra cosa que no termino de entender y que me gustaría que vosotros me la aclaraseis. Tengo entendido que trabajando con Spring e Hibernate se trabaja a nivel de objetos y clases, y que cada tabla sería una clase y cada una instancia de la clase, pero lo que no acabo de entender es como modificar y acceder a los campos de la tabla desde mi código Java, porque yo siempre que he leído manuales utiliza session.save o HibernateTemplate. Yo por ejemplo para introducir una fila en la base de datos tengo que hacer esto en mi clase DAO.

private Pais pais;

Código:
@Autowired	
public CarritoDAOImpl(Pais pais) {
	this.pais = pais;
} 

pais.setNombrePais("nombre");
pais.setIdPais(1);

hibernateTemplate.save(pais);
Y para recuperar una serie de filas:

Código:
return hibernateTemplate.find("from Pais where pais=?",pais);
¿Esto es así? ¿O hay otra forma de hacerlo, trabajando sólo a nivel de clases y objetos y sin utilizar lenguaje HQL?

Y luego por ejemplo a la hora de hacer Joins entre tablas no se como hacerlo con HibernateTemplate y HQL, pero como digo yo creo que se puedo hacer a nivel de objetos, a ver si me podeis ayudar un poco por favor.

Gracias

Un saludo
  #6 (permalink)  
Antiguo 16/06/2011, 17:13
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: Hibernate no me crea las tablas

Trata usando el dialect de MySQL solo. Una vez trate de usar el de InnoDB pero no funciono.
org.hibernate.dialect.MySQLDialect
  #7 (permalink)  
Antiguo 16/06/2011, 22:08
 
Fecha de Ingreso: diciembre-2007
Mensajes: 135
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hibernate no me crea las tablas

también lo probé y nada, ¿alguien me ayuda en el tema que puse antes?
  #8 (permalink)  
Antiguo 17/06/2011, 08:51
 
Fecha de Ingreso: febrero-2010
Ubicación: Gran Canaria
Mensajes: 280
Antigüedad: 14 años, 8 meses
Puntos: 12
Respuesta: Hibernate no me crea las tablas

Sí claro, para que no te queden esos códigos tan feotes en las consultas con Hibernate utilizo Criteria en vez de HQL, con lo que programas completamente con orientación a objetos.

Es muy sencillo y queda mucho más limpio.

Tienes más información aquí >> http://www.google.es/search?aq=f&sou...eria+hibernate

Si tienes alguna duda concreta ponla por aquí a ver si se te puede ayudar.

Saludos

PD: HibernateTemplate es una plantilla del framework Spring, pero no es necesaria, igual no te conviene usarla de momento.

PD: Para hacer que genere las tablas automágicamente tienes que utilizar ingeniería inversa de Hibernate, ¿Qué IDE utilizas?
Tienes más información aquí >> http://www.google.es/search?sourceid...w=1280&bih=649

Última edición por javihd; 17/06/2011 a las 08:57
  #9 (permalink)  
Antiguo 19/06/2011, 19:06
 
Fecha de Ingreso: diciembre-2007
Mensajes: 135
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hibernate no me crea las tablas

Cita:
Iniciado por javihd Ver Mensaje
Sí claro, para que no te queden esos códigos tan feotes en las consultas con Hibernate utilizo Criteria en vez de HQL, con lo que programas completamente con orientación a objetos.

Es muy sencillo y queda mucho más limpio.

Tienes más información aquí >> http://www.google.es/search?aq=f&sou...eria+hibernate

Si tienes alguna duda concreta ponla por aquí a ver si se te puede ayudar.

Saludos

PD: HibernateTemplate es una plantilla del framework Spring, pero no es necesaria, igual no te conviene usarla de momento.

PD: Para hacer que genere las tablas automágicamente tienes que utilizar ingeniería inversa de Hibernate, ¿Qué IDE utilizas?
Tienes más información aquí >> http://www.google.es/search?sourceid...w=1280&bih=649

Gracias, estaba probando con Criteria poniendo el siguiendo código:

Código:
		Session session = null;
		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
		
		session = sessionFactory.openSession();
		
		Criteria crit = session.createCriteria(Estudiante.class);
		
		List<Estudiante> estudiantes = crit.list();
		
		for(Iterator<Estudiante> it = estudiantes.iterator(); it.hasNext();){
			Estudiante est = (Estudiante) it.next();
			  System.out.println(" ID: " + est.getIdEstudiante());
		}
Tan sólo pretendo imprimir en pantalla una lista de todos los estudiantes que haya en la tabla Estudiantes, que ya está creada, no sé si lo hice correctamente pero me lanza el siguiente error:

Código:
...

java.sql.SQLException: No suitable driver found for jdbc:mysql//localhost/Proyecto"
	java.sql.DriverManager.getConnection(DriverManager.java:602)
	java.sql.DriverManager.getConnection(DriverManager.java:154)
	org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133)
	org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
	org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
	org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161)
	org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1700)
	org.hibernate.loader.Loader.doQuery(Loader.java:801)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
	org.hibernate.loader.Loader.doList(Loader.java:2533)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
	org.hibernate.loader.Loader.list(Loader.java:2271)
	org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:119)
	org.hibernate.impl.SessionImpl.list(SessionImpl.java:1716)
	org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:347)

...
Parece que no coge el driver para jdbc, sin embargo utilizando HibernateTemplate lo coge sin problemas, el driver mysql-connector-java-5.1.15-bin.jar lo tengo ya en el Path, pero no funciona, no se porque no me coge así el driver y con HibernateTemplate sí (en realidad utilizando HibernateTemplate quitando el driver mysql-connector-java-5.1.15-bin.jar también funciona), ¿alguien sabe?

Un saludo
  #10 (permalink)  
Antiguo 20/06/2011, 20:28
 
Fecha de Ingreso: diciembre-2007
Mensajes: 135
Antigüedad: 16 años, 10 meses
Puntos: 1
Respuesta: Hibernate no me crea las tablas

Cita:
Iniciado por javihd Ver Mensaje
Sí claro, para que no te queden esos códigos tan feotes en las consultas con Hibernate utilizo Criteria en vez de HQL, con lo que programas completamente con orientación a objetos.

Es muy sencillo y queda mucho más limpio.

Tienes más información aquí >> http://www.google.es/search?aq=f&sou...eria+hibernate

Si tienes alguna duda concreta ponla por aquí a ver si se te puede ayudar.

Saludos

PD: HibernateTemplate es una plantilla del framework Spring, pero no es necesaria, igual no te conviene usarla de momento.

PD: Para hacer que genere las tablas automágicamente tienes que utilizar ingeniería inversa de Hibernate, ¿Qué IDE utilizas?
Tienes más información aquí >> http://www.google.es/search?sourceid...w=1280&bih=649

Respecto al tema de generar las tablas automáticamente ya lo he solucionado, simplemente poniendo "<prop key="hibernate.hbm2ddl.auto">create</prop>" y "<prop key="hibernate.dialect">org.hibernate.dialect.MySQ LInnoDBDialect</prop>", ya me crea las tablas con sus claves ajenas y todo, no sé porque antes no lo hacía.

Sin embargo sigo teniendo el mismo problema, me da el error de que no encuentra el driver para jdbc, yo he añadido ya el driver driver mysql-connector-java-5.1.15-bin.jar en el path del proyecto y en la carpeta bin del Tomcat, no se qué más hacer... a ver si alguien sabe.

Un saludo

Etiquetas: crea, hibernate, 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 22:40.