Ich habe diese @NamedNativeQuery@NamedNativeQuery Beschränkungsverletzung - Transaktion
@NamedNativeQuery(name = "Certificacion.updateCertificacionAclaraciones", query = "UPDATE CERTIFICACION "
+ "SET PENDIENTE_GENERACION = :pendienteGeneracion, ID_ACLARACIONES_TEMP_ESCRITO = :idAclaracion "
+ "WHERE ID IN (:paso)")
Und ich habe diese EJB Struktur einer Transaktion zu erhalten
@TransactionManagement(TransactionManagementType.CONTAINER)
@Stateless
public class PRequerimientoCCServiceBean implements
IPRequerimientoCCServiceBeanLocal {
@Override
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void guardarRequerimiento(Usuario usuario,
ConjuntoCertificaciones conjunto, String aclaracionGeneral,
Map<Long, String> mapAclaracionColegio) throws RollbackException {
try {
// Realizamos el guardado de las aclaraciones y la generación del
// documento
AclaracionesTempEscrito currentAclaracion = new AclaracionesTempEscrito();
...
entityManager.persist(currentAclaracion);
generarDocumento(currentAclaracion, conjunto, usuario);
} catch (Exception e) {
ejbContext.setRollbackOnly();
throw new RollbackSajgException();
}
}
@TransactionAttribute(TransactionAttributeType.MANDATORY)
private void generarDocumento(AclaracionesTempEscrito findAclaracion,
ConjuntoCertificaciones conjunto, Usuario usuario)
throws RollbackException {
...
Query actualizaCertificacionesAclaracion = entityManager
.createNamedQuery("Certificacion.updateCertificacionAclaraciones");
actualizaCertificacionesAclaracion
.setParameter("pendienteGeneracion", true)
.setParameter("idAclaracion", findAclaracion.getId())
.setParameter("paso", paso).executeUpdate();
}
}
Es nehme an, dass ich begehen wird ausgeführt, wenn guardarRequerimiento
Verfahren endet aber Wenn ich meine nativeQuery
mit executeUpdate
führe bekomme ich eine Ausnahme von ConstraintViolation
org.hibernate.exception.ConstraintViolationException: konnte nicht Aussage
Ich denke ausführen, dass es da ist, obwohl findAclaracion.getId()
in der Transaktion vorhanden ist, wird es nicht in der Datenbank vorhanden ist und die executeUpdate
müssen, dass dieses Objekt in der Datenbank vorhanden ist weil es nicht in meinem Persistenzkontext ist, wenn es ausgeführt wird.
Warum bekomme ich dieses Verhalten? Wie kann ich lösen?
Vielen Dank.
Wenn ich einen Flush alles außer Ordnung ist, wenn executeUpdate actualizaCertificacionesAclaracion eine Ausnahme aus, weil ich versuche, ein Zurückkehren zu tun, aber es nicht Wirkung haben, es schon ist in der DB. Andererseits, wenn ich keinen Flush mache, bekomme ich ConstraintViolation, wie ich auf meinem Post sage. –