0
我有这样的@NamedNativeQuery@NamedNativeQuery违反约束 - 交易
@NamedNativeQuery(name = "Certificacion.updateCertificacionAclaraciones", query = "UPDATE CERTIFICACION "
+ "SET PENDIENTE_GENERACION = :pendienteGeneracion, ID_ACLARACIONES_TEMP_ESCRITO = :idAclaracion "
+ "WHERE ID IN (:paso)")
而且我有这个EJB结构得到
@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();
}
}
它以为我会执行提交时guardarRequerimiento
方法结束,但交易当我执行我nativeQuery
与executeUpdate
我得到一个例外ConstraintViolation
org.hibernate.exception.ConstraintViolationException:无法 执行语句
我认为,这是因为,虽然存在于交易findAclaracion.getId()
,它不会在数据库中存在和executeUpdate
需要这个对象在数据库中存在因为执行时不在我的持久性上下文中。
为什么我会得到这种行为?我该如何解决?
谢谢。
当我做了刷新,一切都很好,除非executeUpdate的actualizaCertificacionesAclaracion抛出一个异常,因为我尝试做一回退,但它没有效果,它已经在DB中。另一方面,如果我不做冲洗,我得到ConstraintViolation,正如我在我的帖子中所说的那样。 –