Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > AYUDA JPA @ManyToMany

Estimados Amigos, agradeceria me pueda ayudar , primero detallo:

TENGO LO SIGUIENTE:

[code]
package model.jpa;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Usuarios implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Integer id_usuario;
   private String nombre;
   private String estado;
   @ManyToMany(mappedBy="usuarios")
   private List<Cuestionarios> cuestionarios=new ArrayList<Cuestionarios>();
   public List<Cuestionarios> getCuestionarios() {
       return cuestionarios;
   }
   public void setCuestionarios(List<Cuestionarios> cuestionarios) {
       this.cuestionarios = cuestionarios;
   }
   public Integer getId_usuario() {
       return id_usuario;
   }
   public void setId_usuario(Integer id_usuario) {
       this.id_usuario = id_usuario;
   }
   public String getNombre() {
       return nombre;
   }
   public void setNombre(String nombre) {
       this.nombre = nombre;
   }
   public String getEstado() {
       return estado;
   }
   public void setEstado(String estado) {
       this.estado = estado;
   }
}


[/code]

[code]
package model.jpa;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
@Entity
public class Cuestionarios implements Serializable {
   private static final long serialVersionUID = 1L;
   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Integer id_cuestionario;
   private String nombre;
   private String estado;
   @OneToMany(mappedBy="cuestionarios")
   private List<Preguntas> preguntas=new ArrayList<Preguntas>();
   //ASOCIACION DE MUCHOS A MUCHOS ENTRE TABLA USUARIOS Y CUESTIONARIOS
   @ManyToMany
   @JoinTable(name="USUARIOS_CUESTIONARIOS",
           joinColumns=
                   @JoinColumn(name="id_cuestionario"),
           inverseJoinColumns=
                   @JoinColumn(name="id_usuario"))
   private List<Usuarios> usuarios=new ArrayList<Usuarios>();

   public List<Usuarios> getUsuarios() {
       return usuarios;
   }

   public void setUsuarios(List<Usuarios> usuarios) {
       this.usuarios = usuarios;
   }
   public List<Preguntas> getPreguntas() {
       return preguntas;
   }
   public void setPreguntas(List<Preguntas> preguntas) {
       this.preguntas = preguntas;
   }
   public Integer getId_cuestionario() {
       return id_cuestionario;
   }
   public void setId_cuestionario(Integer id_cuestionario) {
       this.id_cuestionario = id_cuestionario;
   }
   public String getNombre() {
       return nombre;
   }
   public void setNombre(String nombre) {
       this.nombre = nombre;
   }
   public String getEstado() {
       return estado;
   }
   public void setEstado(String estado) {
       this.estado = estado;
   }
}

[/code]

El resultado de eso , al ejecutar la aplicación es la generación de 3 tablas:

[code]
mysql> describe usuarios;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| ID_USUARIO | int(11)      | NO   | PRI | NULL    |       |
| ESTADO     | varchar(255) | YES  |     | NULL    |       |
| NOMBRE     | varchar(255) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.03 sec)

mysql> describe cuestionarios;
+-----------------+--------------+------+-----+---------+-------+
| Field           | Type         | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| ID_CUESTIONARIO | int(11)      | NO   | PRI | NULL    |       |
| ESTADO          | varchar(255) | YES  |     | NULL    |       |
| NOMBRE          | varchar(255) | YES  |     | NULL    |       |
+-----------------+--------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> describe usuarios_cuestionarios;
+-----------------+---------+------+-----+---------+-------+
| Field           | Type    | Null | Key | Default | Extra |
+-----------------+---------+------+-----+---------+-------+
| id_cuestionario | int(11) | NO   | PRI | NULL    |       |
| id_usuario      | int(11) | NO   | PRI | NULL    |       |
+-----------------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

[/code]


Con esto todo bien, agregue los siguientes usuarios:

[code]
mysql> select * from usuarios;
+------------+--------+---------+
| ID_USUARIO | ESTADO | NOMBRE  |
+------------+--------+---------+
|          1 | ACTIVO | RICARDO |
|          2 | ACTIVO | PEDRO   |
|          3 | ACTIVO | ANDRES  |
[/code]

Los siguientes cuestionarios:

[code]

mysql> select * from CUESTIONARIOS;
+-----------------+--------+--------------------------+
| ID_CUESTIONARIO | ESTADO | NOMBRE                   |
+-----------------+--------+--------------------------+
|               1 | ACTIVO | CUESTIONARIO MATEMATICAS |
|               2 | ACTIVO | CUESTIONARIO CASTELLANO  |
|               3 | ACTIVO | CUESTIONARIO INGLES      |
+-----------------+--------+--------------------------+
3 rows in set (0.00 sec)


[/code]

Ahora necesito decir que ricardo y pedro hacen el cuestionario de matemáticas e ingles, teóricamente seria:

[code]
Tabla usuarios_cuestionarios
---------------------------------
id_usuario,id_cuestionario
1             ,1
1             ,3
2             ,1
2             ,3

[/code]


Ahora lo que estoy tratando de hacer desde mi código Java para lograr esto es lo siguiente:

[code]

    EntityManagerFactory emf=Persistence.createEntityManagerFactory("JPA_EJB_FULLPU");
           EntityManager em=emf.createEntityManager();
           Usuarios u=new Usuarios();
           //BUSCO EL ID DEL USUARIO
           u=em.find(Usuarios.class,1);
           Cuestionarios c=new Cuestionarios();
           //BUSCO EL ID DEL CUESTIONARIO
           c=em.find(Cuestionarios.class,1);
           //ASOCIO EL CUESTIONARIO CON EL USUARIO
           c.getUsuarios().add(u);
           //ASOCIO EL USUARIO CON EL CUESTIONARIO
           u.getCuestionarios().add(c);
           em.getTransaction().begin();
           em.persist(u);
           em.persist(c);
           em.getTransaction().commit();
           em.close();

[/code]


PERO ME DA ERROR!!!!... AGRADECERIA DE SU AYUDA.

Atento a sus comentarios.

julio 9, 2015 | Registered Commenterricardotoledob

Te falta la parte más importante de todo. ¿Qué error te dá? y ¿En que punto te da?
Gracias

julio 9, 2015 | Registered Commenterantuansoft

Exception Description: Cannot use an EntityTransaction while using JTA.

julio 9, 2015 | Registered Commenterricardotoledob

jejeje, 2 hors poniendo todo el codigo y despues una sola linea para describir el error..... Pon toda la traza de la excepcion amigo, que no cobramos por palabras....!!! XDD

julio 9, 2015 | Unregistered Commenterloderain

jejejeje, disculpa , pero la verdad es que no me da mas error, ¿como puedo capturar mas errores?

julio 9, 2015 | Registered Commenterricardotoledob

Debbug Console:

Attaching to localhost:9009
Not able to submit breakpoint MethodBreakpoint [com.model.Alumno].getId '()Ljava/lang/String;', reason: Breakpoint belongs to disabled source root '/Users/ricardotoledo/NetBeansProjects/PROYECTO_JPA/src/java'. See Window/Debugging/Sources.
Not able to submit breakpoint FieldBreakpoint com.model.Alumno.apellidos, reason: Breakpoint belongs to disabled source root '/Users/ricardotoledo/NetBeansProjects/PROYECTO_JPA/src/java'. See Window/Debugging/Sources.
Not able to submit breakpoint FieldBreakpoint com.model.jpa.Funcionario.id_funcionario, reason: Breakpoint belongs to disabled source root '/Users/ricardotoledo/NetBeansProjects/ABASTECIMIENTO_1/src/java'. See Window/Debugging/Sources.
User program running
LineBreakpoint mostrar.java : 67 successfully submitted.
LineBreakpoint mostrar.java : 65 successfully submitted.
LineBreakpoint mostrar.java : 66 successfully submitted.
LineBreakpoint mostrar.java : 63 successfully submitted.
LineBreakpoint mostrar.java : 64 successfully submitted.
LineBreakpoint mostrar.java : 61 successfully submitted.
LineBreakpoint mostrar.java : 60 successfully submitted.
LineBreakpoint mostrar.java : 59 successfully submitted.
LineBreakpoint mostrar.java : 57 successfully submitted.
LineBreakpoint mostrar.java : 55 successfully submitted.
LineBreakpoint mostrar.java : 54 successfully submitted.
MethodBreakpoint [util.mostrar].processRequest '(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V' successfully submitted.
Not able to submit breakpoint FieldBreakpoint model.jpa.Preguntas.id, reason: Field 'id' does not exist in class model.jpa.Preguntas.
Method breakpoint hit in util.mostrar.processRequest at line 24 by thread http-listener-1(1).
Thread http-listener-1(1) stopped at mostrar.java:24.

julio 9, 2015 | Registered Commenterricardotoledob

Prueba así...


try{
EntityManagerFactory emf=Persistence.createEntityManagerFactory("JPA_EJB_FULLPU");
EntityManager em=emf.createEntityManager();
Usuarios u=new Usuarios();
//BUSCO EL ID DEL USUARIO
u=em.find(Usuarios.class,1);
Cuestionarios c=new Cuestionarios();
//BUSCO EL ID DEL CUESTIONARIO
c=em.find(Cuestionarios.class,1);
//ASOCIO EL CUESTIONARIO CON EL USUARIO
c.getUsuarios().add(u);
//ASOCIO EL USUARIO CON EL CUESTIONARIO
u.getCuestionarios().add(c);
em.getTransaction().begin();
em.persist(u);
em.persist(c);
em.getTransaction().commit();
em.close();
}
catch(Exception e){
e.printStackTrace();
}

julio 9, 2015 | Unregistered Commenterloderain

No me arroja nada, si quieres te doy acceso a mi maquina por temaViewer

julio 9, 2015 | Registered Commenterricardotoledob

Es algo que me tiene hace mucho tiempo.... :(

julio 9, 2015 | Registered Commenterricardotoledob

La verdad que no me gusta andar pincando en sitios ajenos, si quieres mira, mandame tu proyecto en un zip junto con el script de la base de datos, y le echo yo un ojo desde aqui, si no te importa vamos...

Ejk eso de andar en maquina ajena no me mola. Mi correo es loderain1@gmail.com

mandamelo ai y le echo un ojo ;)

julio 9, 2015 | Unregistered Commenterloderain

Hola, Revisando el codigo, veo una serie de problemas en la definicion de las entidades.

1. No estas aplicando el estandar de nombrado para los atributos de las entidades.
Ejemplo: Tabla Usuarios.
En esta tabla tienes un campo que es "id_usuario", como sabemos este campo no se mapea exactamente en la entidad con ese mismo nombre, tienes que seguir el estadandar de nombrado.. en este caso el atributo deberia ser mapeado asi.


@Column(name="id_usuario") //campo en la bd
private int idUsuario; //campo mapeado segun el estandar de nombrado java.

En alguna de las jpa's que has creado, no coincide alguno de los atributos con los campos de las tablas. revisa bien cada una de tus entidades. especialmente la tabla "preguntas"

julio 9, 2015 | Unregistered CommenterOscar Gutierrez

Ya te lo envie al correo, de todas maneras lo dejo acá https://www.dropbox.com/s/r72phzlrykqrog2/JPA_EJB_FULL.zip?dl=0

julio 9, 2015 | Registered Commenterricardotoledob

Oscar, ya mapee todos los id de las tablas

julio 9, 2015 | Registered Commenterricardotoledob

SOLUCIONADO!!:

//CREAR USUARIOS EN ASIGNATURAS//
EntityManagerFactory emf=Persistence.createEntityManagerFactory("JPA_EJB_FULLPU");
EntityManager em=emf.createEntityManager();
EntityTransaction tx=em.getTransaction();
Usuarios u=new Usuarios();
u=em.find(Usuarios.class,2);
Cuestionarios c=new Cuestionarios();
//BUSCO EL ID DEL CUESTIONARIO
c=em.find(Cuestionarios.class,1);
//ASOCIO EL CUESTIONARIO CON EL USUARIO
c.getUsuarios().add(u);
//ASOCIO EL USUARIO CON EL CUESTIONARIO
u.getCuestionarios().add(c);
tx.begin();
em.persist(u);
em.persist(c);
tx.commit();
em.close();


PERO AHORA ME GUSTARIA SABER COMO PUEDO MOSTRAR A TODOS LOS ALUMNOS DE X CURSO.

julio 9, 2015 | Registered Commenterricardotoledob

ahora en sql puedo obtener ciertos resultados como por ejemplo:

[code]
mysql> select usuarios.nombre,cuestionarios.nombre from
-> usuarios,cuestionarios,usuarios_cuestionarios
-> where usuarios_cuestionarios.id_usuario=usuarios.id_usuario
-> and
-> usuarios_cuestionarios.id_cuestionario=cuestionarios.id_cuestionario;
+---------+--------------------------+
| nombre | nombre |
+---------+--------------------------+
| RICARDO | CUESTIONARIO MATEMATICAS |
| ROBERT | CUESTIONARIO MATEMATICAS |
| ROBERT | CUESTIONARIO CASTELLANO |
| PEDRO | CUESTIONARIO MATEMATICAS |
+---------+--------------------------+
4 rows in set (0.00 sec)

mysql> select usuarios.nombre,cuestionarios.nombre from usuarios,cuestionarios,usuarios_cuestionarios where usuarios_cuestionarios.id_usuario=usuarios.id_usuario and usuarios_cuestionarios.id_cuestionario=cuestionarios.id_cuestionario and cuestionarios.id_cuestionario=2;
+--------+-------------------------+
| nombre | nombre |
+--------+-------------------------+
| ROBERT | CUESTIONARIO CASTELLANO |
+--------+-------------------------+
1 row in set (0.00 sec)

mysql> select usuarios.nombre,cuestionarios.nombre from usuarios,cuestionarios,usuarios_cuestionarios where usuarios_cuestionarios.id_usuario=usuarios.id_usuario and usuarios_cuestionarios.id_cuestionario=cuestionarios.id_cuestionario and cuestionarios.id_cuestionario=1;
+---------+--------------------------+
| nombre | nombre |
+---------+--------------------------+
| RICARDO | CUESTIONARIO MATEMATICAS |
| ROBERT | CUESTIONARIO MATEMATICAS |
| PEDRO | CUESTIONARIO MATEMATICAS |
+---------+--------------------------+
3 rows in set (0.00 sec)
[/code]

Aahora como puedo obtener esos resultados desde JPA?

julio 9, 2015 | Registered Commenterricardotoledob