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,正如我在我的帖子中所說的那樣。 –