Hello, I have a problem to retrieve a set of entities. I have the next relationships:
Alumno --- one-to-many --- FormasRptas
Ramo --- one-to-many --- FormasRptas
Forma --- one-to-many --- FormasRptas
For example, I load 3 entities, they have relation with FormasRptas:
Alumno al = (Alumno) sess.load(Alumno.class, idAl);
Ramo r = (Ramo) sess.load(Ramo.class, idRamo);
Forma f = (Forma) sess.load(Forma.class, idForma);
and I create one entity FormaRpta
FormaRpta fr = new FormaRpta();
and I put propieties. Next, I call:
al.getFormas_rptas().add(fr);
and it's work's fine, but when I call
r.getFormas_rptas().add(fr);
this don't work and
f.getFormas_rptas().add(fr);
this don't work :(
When I call
al.getFormas_rptas().iterator();
work's fine too, but
r.getFormas_rptas().iterator();
and
f.getFormas_rptas().iterator();
don't. what is wrong??? Please, help me!!!
Paola
Hibernate version: Hibernate 3.1.3
Mapping documents:
This is Persona.hbm.xml (Alumno is a subclass)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="encuestas.Persona"
table="PERSONA"
lazy="true"
abstract="true">
<id name="id"
type="long"
column="PERSONA_ID">
<generator class="native"/>
</id>
<property name="rut"
type="long"
not-null="true">
<column name="RUT"/>
</property>
<joined-subclass name="encuestas.Alumno" table="ALUMNO">
<key column="ALUMNO_ID"/>
<property name="password"
type="string"
not-null="true">
<column name="PASSW"/>
</property>
<set name="Formas_rptas" lazy="true" inverse="true" cascade="delete" > <key> <column name="alumnoID" /> </key> <one-to-many class="encuestas.FormaRpta"/> </set>
<set name="ramos" lazy="true" table="ALUMNO_RAMO">
<key column="alumnoID"/>
<composite-element class="encuestas.AlumnoRamo">
<parent name="alumno"/>
<many-to-one name="ramo"
class="encuestas.Ramo"
column="ramoID"
not-null="true"/>
<property name="semestre" column="SEMESTRE" not-null="true"/>
<property name="agno" column="AGNO" not-null="true"/>
<property name="estado" column="ESTADO" not-null="true"/>
</composite-element>
</set>
</joined-subclass>
</class>
</hibernate-mapping>
This is Ramo.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="encuestas.Ramo" table="RAMO">
<id name="id" type="long" column="ID">
<!-- <meta attribute="finder-method">findByID</meta> -->
<generator class="native"/>
</id>
<property name="nombre"
type="string"
not-null="true">
<column name="NOMBRE"/>
</property>
<set name="Formas_rptas"
lazy="true"
inverse="true"
cascade="delete" >
<key>
<column name="ramoID" />
</key>
<one-to-many class="encuestas.FormaRpta"/>
</set>
</class>
</hibernate-mapping>
This is Forma.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">
<hibernate-mapping>
<class name="encuestas.Forma" table="FORMA">
<id name="id" type="long" column="ID">
<!-- <meta attribute="finder-method">findByID</meta> -->
<generator class="native" />
</id>
<property name="titulo"
type="string"
not-null="true"
update="false">
<column name="TITULO"/>
</property>
<set name="detalles" lazy="true" inverse="true"
cascade="delete" >
<key>
<column name="formaId" />
</key>
<one-to-many class="encuestas.Detalle"/>
</set>
<set name="Formas_rptas"
lazy="true"
inverse="true"
cascade="delete" >
<key>
<column name="formaID" />
</key>
<one-to-many class="encuestas.FormaRpta"/>
</set>
</class>
</hibernate-mapping>
And, this is FormaRpta
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="encuestas.FormaRpta" table="FORMA_RPTA">
<id name="id" type="long" column="ID">
<!-- <meta attribute="finder-method">findByID</meta> -->
<generator class="native"/>
</id>
<property name="Fecha_rpta"
type="string"
not-null="true"
update="false">
<column name="FECHA_RPTA"/>
</property>
<many-to-one
name="alumno"
class="encuestas.Persona"
>
<!-- Used by code generator
<meta attribute="finder-method">findByAuthorID</meta> -->
<!-- Used as a DDL hint -->
<column name="alumnoID" not-null="true" />
</many-to-one>
<many-to-one
name="forma"
class="encuestas.Forma"
>
<!-- Used by code generator
<meta attribute="finder-method">findByAuthorID</meta> -->
<!-- Used as a DDL hint -->
<column name="formaID" not-null="true" />
</many-to-one>
<many-to-one
name="ramo"
class="encuestas.Ramo"
>
<!-- Used by code generator
<meta attribute="finder-method">findByAuthorID</meta> -->
<!-- Used as a DDL hint -->
<column name="ramoID" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
The classes:
public class Ramo implements Serializable{
private Long id;
private String nombre;
private Set alumnos = new HashSet();
private Set Formas_rptas = new HashSet();
public Ramo() {};
public Long getId(){
return id;
}
public void setId(Long id){
this.id = id;
}
public String getNombre(){
return nombre;
}
public void setNombre(String nombre){
this.nombre = nombre;
}
public Set getAlumnos(){
return alumnos;
}
public void setAlumnos(Set alumnos){
this.alumnos = alumnos;
}
public void addAlumno(Alumno alumno) {
if(alumno == null)
throw new IllegalArgumentException("Alumno Nulo!");
alumno.getRamos().add(this);
alumnos.add(alumno);
}
public Set getFormas_rptas(){
return Formas_rptas;
}
public void setFormas_rptas(Set formas_rptas){
this.Formas_rptas = formas_rptas;
}
}
public class Forma implements Serializable{
private Long id;
private String titulo;
private Set detalles = new HashSet();
private Set Formas_rptas = new HashSet();
public Forma() {}
public Long getId(){
return id;
}
public void setId(Long alumno_id){
this.id = alumno_id;
}
public String getTitulo(){
return titulo;
}
public void setTitulo(String titulo_alum){
this.titulo = titulo_alum;
}
public Set getDetalles(){
return detalles;
}
public void setDetalles(Set detalles){
this.detalles = detalles;
}
public void addDetalle(Detalle detalle) {
if(detalle == null)
throw new IllegalArgumentException("detalle Nulo!");
detalle.setUna_forma(this);
detalles.add(detalle);
}
public Set getFormas_rptas(){
return Formas_rptas;
}
public void setFormas_rptas(Set formas_rptas){
this.Formas_rptas = formas_rptas;
}
}
public class Alumno extends Persona
implements Serializable
{
//private long id;
private String password;
private Set Formas_rptas = new HashSet();
private Set ramos = new HashSet();
public Alumno() {super();}
public String getPassword() {
return password;
}
public void setPassword(String pass) {
this.password = pass;
}
public Set getFormas_rptas(){
return Formas_rptas;
}
public void setFormas_rptas(Set formas_rptas){
this.Formas_rptas = formas_rptas;
}
public void addFormas_rptas(FormaRpta forma) {
if(forma == null)
throw new IllegalArgumentException("forma rpta Nula!");
forma.setAlumno(this);
Formas_rptas.add(forma);
}
public Set getRamos(){
return ramos;
}
public void setRamos(Set ramos){
this.ramos = ramos;
}
public void addRamo(Ramo ramo) {
if(ramo == null)
throw new IllegalArgumentException("Ramo Nulo!");
ramo.getAlumnos().add(this);
ramos.add(ramo);
}
}
public class FormaRpta
implements Serializable
{
private Long id;
private String Fecha_rpta;
private Alumno alumno;
private Forma forma;
private Ramo ramo;
public FormaRpta() {}
public Long getId(){
return this.id;
}
public void setId(Long forma_rpta_id){
this.id = forma_rpta_id;
}
public String getFecha_rpta(){
return Fecha_rpta;
}
public void setFecha_rpta(String fecha_rpta){
this.Fecha_rpta = fecha_rpta;
}
public Alumno getAlumno(){
return alumno;
}
public void setAlumno(Alumno alum){
this.alumno = alum;
}
public Forma getForma(){
return forma;
}
public void setForma(Forma forma){
this.forma = forma;
}
public Ramo getRamo(){
return ramo;
}
public void setRamo(Ramo ramo){
this.ramo = ramo;
}
}
Code between sessionFactory.openSession() and session.close():
Long idAl = new Long(1);
Long idRamo = new Long(1);
Long idForma = new Long(1);
Alumno al = (Alumno) sess.load(Alumno.class, idAl);
Ramo r = (Ramo) sess.load(Ramo.class, idRamo);
Forma f = (Forma) sess.load(Forma.class, idForma);
out.println("\n de ALUMNO");
for (Iterator it = al.getFormas_rptas().iterator(); it.hasNext();) {
FormaRpta frp = (FormaRpta) it.next();
out.println(" FR: "+frp.getId());
}
out.println("\n de RAMO");
for (Iterator it = r.getFormas_rptas().iterator(); it.hasNext();) {
FormaRpta frp = (FormaRpta) it.next();
out.println(" FR: "+frp.getId());
}
out.println("\n de FORMA");
for (Iterator it = f.getFormas_rptas().iterator(); it.hasNext();) {
FormaRpta frp = (FormaRpta) it.next();
out.println(" FR : "+frp.getId());
}
Full stack trace of any exception that occurs:
No errors in compile. Just when I load the page web, print fine to Alumno, but not for Ramo y Forma (is blank, print nothing)
Name and version of the database you are using:
Mysql 5.0.22-Debian_0ubuntu6.06.2
The generated SQL (show_sql=true):
Debug level Hibernate log excerpt:
thanks for read this. Please, help me if you can.
|