java - relaciones - ¿Cómo saber si una entidad JPA separada ya ha sido persistente o no?
relacion de uno a muchos jpa (1)
Tengo una instancia de entidad JPA en la capa de interfaz de usuario web de mi aplicación. Me gustaría saber en cualquier momento si esta entidad ya se ha conservado en la base de datos o si solo está presente en la sesión del usuario.
Sería en la capa de negocios, utilizaría el método entitymanager.contains (Entity), pero en mi capa de interfaz de usuario creo que necesito un atributo adicional que indique si la entidad se ha guardado o no. ¿Cómo implementar eso? Estoy considerando seguir la opción por el momento:
- un atributo JPA con un valor predeterminado establecido por la base de datos, pero forzaría una nueva lectura después de cada actualización?
- un atributo no JPA configurado manualmente en mi código o configurado automáticamente por JPA?
¿Algún consejo / otras sugerencias?
Estoy usando JPA 1 con la implementación de Hibernate 3.2 y preferiría mantener el estándar.
Primero, recordemos los diversos estados de una entidad. De la especificación JPA 1.0 (en la sección 3.2 Ciclo de vida de la instancia de la entidad):
Esta sección describe las operaciones de EntityManager para administrar el ciclo de vida de una instancia de entidad. Una instancia de entidad puede caracterizarse como nueva, administrada, separada o eliminada.
- Una nueva instancia de entidad no tiene identidad persistente y aún no está asociada con un contexto de persistencia.
- Una instancia de entidad gestionada es una instancia con una identidad persistente que está asociada actualmente a un contexto de persistencia.
- Una instancia de entidad separada es una instancia con una identidad persistente que no está (o ya no está) asociada con un contexto de persistencia.
- Una instancia de entidad eliminada es una instancia con una identidad persistente, asociada con un contexto de persistencia, que está programada para ser eliminada de la base de datos.
Y una ilustración gráfica:
Entonces, por definición, una entidad separada ya ha sido persistente, y realmente no creo que esta sea su verdadera pregunta. Ahora, si quiere saber si una entidad es nueva (es decir, no tiene ninguna identidad persistente), ¿qué tal esto?
@Transient
public boolean isNew() {
return (this.id == null);
}