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