Acceso a datos de una BD desde Hibernate

Tengo un problema al tratar de obtener el resultado de una consulta con hibernate y quisiera saber si me puedes ayudar.
Te explico brevemente. En mi bd hay dos tablas que su relación es de muchos a muchos (grupo y objeto) por lo tanto he creado otra tabla de tal manera que solo sea una relación de uno a muchos de la siguiente manera:
Tabla permiso >-- relación (muchos a uno) hacia tabla grupo
Tabla permiso >-- relación (muchos a uno) hacia tabla objeto
He mapeado y creado las clases de las tablas grupo y objeto y todo anda bien hasta que quiero obtener los datos de la tabla objeto desde la tabla grupo, es decir, si yo quiero obtener un campo de la tabla de grupo lo hago de la siguiente manera:
Gru grupo =  (Gru)session.get(Gru.class,5);
Grupo. GetGrupdes(); //ya que el en la tabla de grupo hay un campo llamado grudes
Pero si yo quiero obtener un campo de la tabla de objeto no me da ninguna opción en el grupo, he intentado con el siguiente fragmento de código:
Set menuUsu = grupo.getObj();
pero si yo quiero hacer lo siguiente me marca error.
menuUsu.getObjDes();
En que me estoy equivocando o de que manera puedo accesar a los campos de la tabla de objeto desde la clase de Gru.

1 Respuesta

Respuesta
1
MenuUsu es un conjunto, por lo que primero tendrías que acceder a uno de sus elementos. Por ejemplo:
for (Obj iter : menuUsu){
   iter..getObj();
}
Supongiendo que la clase que has creado para gupo sea Obj. No sé si con esto te habré ayudado.
Que tal gomecan, primero muchas gracias por tu atención y tu respuesta, puse en practica tu ejemplo que me mandaste solo que me marca un error en menuUsu de tipo:
Type mismatch cannot convert from element type Object to Obj.
for (Obj iter : menuUsu){
                   iter.getObjdes();
}
Y en la clase de objeto y grupo tengo declaradas las variables de la siguiente manera:
public class Obj {
    private int cveobj = 0;
    private String objdes = "";
    private Set Gru = new HashSet();
     public Set getGru() {
        return Gru;
    }
    public void setGru(Set gru) {
        Gru = gru;
    }
getters and setters...
}
public class Gru {
    private int cvegru = 0;
    private String grudes = "";
    private Set Obj = new HashSet();
public Set getObj() {
        return Obj;
    }
    public void setObj(Set obj) {
        Obj = obj;
    }
getters and setters...
}
y el mapeo esta de la siguiente manera:
<!-- Tabla de Objetos-->
        <class name="pkgMyClass.Obj" table="OBJ">
            <id name="cveobj" column="CVEOBJ" type="integer">
            <generator class = "increment"></generator>
            </id>
<property name="objdes" type="string"/>
            <set name="Gru" table="PER" cascade="all">
                <key column="CVEOBJ"/>
                <many-to-many class="pkgMyClass.Gru" column="CVEGRU"/>
            </set>
        </class>
<!-- Tabla de Grupo -->
        <class name="pkgMyClass.Gru" table="GRU">
            <id name="cvegru" column="CVEGRU" type="integer">
                <generator class="increment"></generator>
            </id>
<property name="grudes" type="string" />
            <set name="Obj" table="PER" cascade="all">
                <key column="CVEGRU"/>
                <many-to-many class="pkgMyClass.Obj" column="CVEOBJ"/>
            </set>
        </class>
Ya intente de varia maneras y aun no lo consigo, ojala pudieras ayudarme.
Saludos.
También encontré un ejemplo donde se obtienen los datos de diferente manera pero igual tiene error:
grupo = (Gru) session.load(Gru.class, 5);
            Set objeto = grupo.getObj();
            for(Iterator i = (Iterator) objeto.iterator(); i.hasNext();){
                Obj objetos = (Obj) i.next();
                objetos.getObjdes();
            }
El error es de tipo Cannot cast from char to Obj
Y el ejemplo donde lo encontré no marca ese error, tal vez estoy haciendo algo mal.
Puedes hacer dos cosas, una es cambiar el bucle y ponerlo de esta manera:


for (Object iter : menuUsu){
   Obj objeto = (Obj) iter;
   objeto.getObjdes();

}
La otra es parametrizar el conjunto en la clase Gru, y te quedaría así:
public class Gru {
    private int cvegru = 0;
    private String grudes = "";
    private Set<Obj> Obj = new HashSet<Obj>();
    public Set<Obj> getObj() {
        return Obj;
    }
    public void setObj(Set<Obj> obj) {
        Obj = obj;
    }
    // otros getteres && setters
}

Con lo que podrías usar el for que te puse en la otra respuesta.
for (Obj iter : menuUsu){
   iter..getObj();
}

Ya me dirás si se resuelve.
Así es experto tienes toda la razón, solo que en vez de parametrizar el conjunto en la clase de gru lo hice así:
Gru grupo =  (Gru)session.get(Gru.class,iCveGru);
            Set<Obj> menuUsu = grupo.getObj();
            for(Iterator<Obj> iter = menuUsu.iterator(); iter.hasNext();){
                iCount ++;
                Obj objeto = (Obj) iter.next();
                objeto.getCveobj();
                objeto.getObjdes();
            }
De esta manera anda sin problemas muchas gracias. Espero que si me vuelvo a frenar en algo puedas auxiliarme otra vez.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas