Como persistir una entidad que tiene asociacion con otras mediante una Lista con JPA

Hola así es pues tengo una duda la cuestion es que yo accedo a mi base de datos y mediante un formulario mando a llamar un servlet para poder persistir una pregunta con una serie de respuestas y la relacion que mantienen es que una pregunta puede tener muchas respuestas (one to many) y muchas respuestas pueden tener una pregunta ( many to one ) pero pues cuando mando a persistir la pregunta solo guarda la pregunta en la base de datos y las respuestas no me las persiste, estuve buscando por google y encontre el tutorial pero ya cambie el tipo de cambio en cascada a: cascade = CascadeType.PERSIST en la entidad Respuesta pero la verdad es que las entidades las he creado con el IDE Netbeans y solo modifique en la anotación @ManyToOne ese parametro pero no funciono alguien me podria ayudar porfavor para saber que hago mal a continuación dejo mi servlet y entidades.

Servlet:

 

Entidad Pregunta:

 

Entidad Respuesta:

 

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Los parametros respuestas en

Los parametros respuestas en tu formulario se llaman:   etc? Por que as'i es como estas construyendo la cadena  

Tambien al agregar una respuesta solo estas creando insta instancia de objeto y agregandolo muchas veces, la ultima vez con nada porque si lo anterior no fue intencional, estas poniendo en una lista con el mismo objeto con el valor de  

Me parece que lo que intentabas era:

 

( tendrias que agregar el parametro "texto" al constructor )

Para que esto no te pase de nuevo, separa el código que inserta a la base de datos y el codigo de tu servlet. Asi puedes probar directamente "offline" y ver que esta sucediendo

Imagen de Cid

las variables respuesta

Hola si las variables respuesta asi estan generadas de la "respuesta1" a la "respuesta7" pero ya vi bien que me lanzo una excepcion del sql cuando intenta guardar a la BD y bueno el constructor no lo hice yo, lo genero automaticamente el netbeans segun siguiendo la buenas practicas jajaja. y solo me genero una constructor por defalutl (sin parametros) y otro mas que recibe el id aunque este no me sirve se supone que la base de datos autogenera el id. aqui dejo la excepcion que me tira.

 

Imagen de Cid

Y otro problema

Creo que en el anterior es un problema acerca de como diseñaron la base de datos, lo que queremos hacer es presentar areas de texto para guardar una pregunta con sus respuestas pero todo en el mismo jsp pero para poder persisitir una Respuesta necesito el id de la Pregunta y como se persisten en el mismo servlet pues no puedo tener el id de la Pregunta entonces no se puede persistir la Respuesta, alguien sabe si esta relacion se puede auto-persistir sin que tenga que consultar de manera imperativa el id de la Pregunta y cuando lea todo del formulario persista tanto Pregunta como Respuesta.

El otro problema es que tengo un código parecido para guardar un objeto Examen y si lo hace pero tambien me esta guardando un Examen con valores de atributos nulos, es decir me guarda el Examen que se genera con un formulario de una pagina jsp pero aparte genera uno mas que tiene valore null en los demas atributos pero no se porque hace eso.

Ok, pero entendiste que tu

Ok, pero entendiste que tu estas buscando los parametros llamados:
  y que estabas usando el mismo objeto en vez de crear uno nuevo por cada respuesta?

El código generado por netbean si esta correcto y si sigue las mejores practicas, pero no quiere decir que se vuelve intocable, lo puedes escribir tu mismo, o simplemente hacer el setter antes.

El diseño de la base de datos también se ve bien, lo que pasa es que efectivamente no le estas estas diciendo a que pregunta corresponden esas respuestas y la base de datos no la va adivinar. En tu código llamas a   pero no le has dicho a que pregunta corresponde esa respuesta. Intenta llamando antes respuesta.setPreguntas y puede ser que incluso no necesites invocar persist sobre cada respuesta.

El problema del examen suena a un similar mal manejo de los objetos ( te falta crear uno nuevo o asignarlo correctamente )

Asociar la pregunta la pregunta a la respuesta

Revisando un poco tu código te hago las siguientes observaciones.

1.- La propiedad cascade=PERSIST solo va en la entidad que contiene la lista, es decir en Pregunta, debido a que cuando guardes una pregunta las respuestas deben ser guardadas tambien, además no hay forma de que, en tu caso, se guarde una respuesta de forma independiente.
2. La entidad que tienes que guardar es la Pregunta, las respuestas se deben guardar automáticamente
3. Es necesario asociar la pregunta a la respuesta, para que ésta sepa a que pregunta pertenece, es una relación bidireccional, como lo tienes ahora sólo la Pregunta conoce sus respuestas.

 

Para que entiendas el

Para que entiendas el problema de usar la misma instancia en cada respuesta ve este ejemplo:

 

Jeje y siguiendo con el ejemplo y la analogia, tu null es como preguntarse en ese codigo: Como es que no saben que su tio es Donald?

Imagen de Cid

Ya lo resolvi

Pues realmente el problema quedo resuelto lo que pasa es que no sabia como persistir la entidad Pregunta y al mismo tiempo obtener el dato del id (el id que se autoincrementa) para asignarselo a las entidades Respuestas que tenian ligada la Pregunta pero ya quedo, solo tenía que agregar una llamada al metodo flush() del EntityManager y luego ya con eso podia leer el dato del id desde la entidad Pregunta, que ya tenia el id que genero la BD.

Y como siempre san Google me salvo ahi dejo el link que me ayudo de StackOverflow

Y gracias por tus respuestas.

Imagen de Cid

jajaja y si tenias razon en mis variables respuesta

Un amigo me lo hizo notar y me dije pero que "pendejo soy" jajajaja, apenas llevo unos 2 dias aprendiendo de JPA, y pues son los primeros pasos.