Mostrando entradas con la etiqueta jpa. Mostrar todas las entradas
Mostrando entradas con la etiqueta jpa. Mostrar todas las entradas

jueves, 2 de junio de 2016

Gestión de transacciones declarativas en Spring.

Es muy interesante poder definir de forma declarativa en el código, el ámbito de nuestras transacciones. 
Hay 7 tipos de propagación de las transacciones en Spring:

  • PROPAGATION_REQUIRED - Crea una nueva transacción si no existe. Si existe participa en ella. PROPAGATION_SUPPORTS - No crea una nueva transacción si no existe. Si existe participa en ella. 
  • PROPAGATION_MANDATORY - Si existe transacción participa en ella. Si no existe lanza una excepción. 
  • PROPAGATION_REQUIRES_NEW - Crea una nueva transacción. Si existe una transacción actual la suspende. 
  • PROPAGATION_NOT_SUPPORTED - No participa en la transacción actual y se ejecuta de forma no transaccional. 
  • PROPAGATION_NEVER - Si existe una transacción actualmente lanza una excepción. PROPAGATION_NESTED - Ejecuta una transacción anidada si existe una transacción actualmente. El caso más habitual es 
  • PROPAGATION_REQUIRED. http://www.mkyong.com/spring/spring-aop-transaction-management-in-hibernate/

martes, 19 de febrero de 2013

Error JPA no sigue secuencias de Postgres

Si os encontrais en JPA que vuestros objetos no siguen las secuencias definidas en Postgres, para el objeto en cuestión, y recibes errores del tipo:

[ERROR]: javax.persistence.PersistenceException: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [

@Id
@SequenceGenerator(name="tabla_id_generator", sequenceName="esquema.tabla_id_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="tabla_id_generator")
@Basic(optional=false)
private Integer id;

Hay un truco que funciona, que es añadir "allocationSize=1":

@Id
@SequenceGenerator(name="tabla_id_generator", sequenceName="esquema.tabla_id_seq",allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="tabla_id_generator")
@Basic(optional=false)
private Integer id;

Por si sirve a alguien.