2011-12-16 26 views
5

La documentación para EntityManager.persist() dice que será .EntityManager.contains() devuelve falso después de persist()

Está persistiendo la entidad en la base de datos, pero cuando llamo al método EntityManager.contains() para verificar si la entidad que acabo de persistir se gestiona, devuelve false.

Solo quiero saber por qué sucede esto? Tal vez hay algo que no pude hacer o algo que pasé por alto?

sugerencias serán bienvenidos: D

+1

¿Se puede publicar el código en el que persiste y lee el contenido del EntityManager? –

Respuesta

3

Eso es realmente extraño. Según la la Sun EJB3 spec:

El método se puede utilizar para determinar si una entidad instancia se logró en el contexto de persistencia actual.

El método contains devuelve verdadero:

  • Si la entidad se ha recuperado de la base de datos, y no se ha eliminado o separado.
  • Si la instancia de entidad es nueva y se ha llamado al método persist en la entidad o la operación persist ha sido transferida a ella.

El método contains devuelve falso:

  • Si la instancia se separa.
  • Si se ha llamado al método remove en la entidad, o si la operación de eliminación se ha realizado en cascada.
  • Si la instancia es nueva y no se ha llamado al método persist en la entidad o la operación persist no se ha conectado en cascada al .

Tenga en cuenta que el efecto de la conexión en cascada de persistir o eliminar es inmediatamente visible para el contiene método, mientras que el inserción real o supresión de la representación base de datos para la entidad puede ser diferido hasta que el final de la transacción .

¿Está llamando al contains en la misma transacción?

+0

Creo que estoy en la misma transacción, pero no estoy muy seguro porque no estoy definiendo dónde debe comenzar la transacción y confirmarla porque la dejé en el contenedor. Pero creo que el motivo por el que no obtengo la entidad persistente es debido a la clave primaria. Una de las claves principales debería provenir de la base de datos y no puedo recuperarla. De todos modos, intentaré un enfoque diferente para hacer esto. Gracias por la información: D –

0

hicimos algunas soluciones, en lugar de persistir> refrescando, simplemente tomamos la clave autogenerada del almacén de datos y la asignamos manualmente a los campos clave de la entidad y luego la conservamos.

Cuestiones relacionadas