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.classimport 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;
}
}
Código:
Código de configuración de Hibernate: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:
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.<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>
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