2016-04-08 26 views
0

Bu @NamedNativeQuery@NamedNativeQuery Kısıtlama ihlali - İşlem

@NamedNativeQuery(name = "Certificacion.updateCertificacionAclaraciones", query = "UPDATE CERTIFICACION " 
       + "SET PENDIENTE_GENERACION = :pendienteGeneracion, ID_ACLARACIONES_TEMP_ESCRITO = :idAclaracion " 
       + "WHERE ID IN (:paso)") 

var Ve O guardarRequerimiento yöntem ama sona erdiğinde ben taahhüt çalıştırır varsayalım

@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(); 

     } 
    } 

Bir işlem almak için bu EJB yapıya sahip nativeQuery'u executeUpdate ile yürüttüğümde ConstraintViolation

istisnası var

org.hibernate.exception.ConstraintViolationException: Ben findAclaracion.getId() işlemde mevcut olmasına rağmen, bu veritabanında yok çünkü olduğunu düşünüyorum ve executeUpdate bu nesne veritabanında mevcut olduğunu ihtiyacımız deyimi

yürütmek could çünkü yürütürken kalıcılık bağlamında değil.

Bu davranışı neden alıyorum? Nasıl çözebilirim?

Teşekkür ederiz.

cevap

0

Yıkamadan sonra ve generDocumento'dan (currentAclaracion, conjunto, usuario) önce bu nesneyi yenilemeyi deneyebilirsiniz; Eğer sorgu ve ObjectList değerlerini güncelleyerek bu döngü gibi yapabilir veya ..

+0

Zaten, ben bir geri alma yapmaya çalışacağım çünkü executeUpdate actualizaCertificacionesAclaracion bir istisna ama O değil etkiye sahip olursa dışında bir floş herşey yolunda yaptığınızda O DB içinde. Diğer taraftan, eğer bir floş yapmazsam, yazımda söylediğim gibi ConstraintViolation alıyorum. –