2016-04-04 20 views
0

Aşağıda beş etki alanı sınıfı var (dinamik programlama). İçindeki iki liste ile kayıt kontrol listesi başlığını güncellemem gerekiyor, bu listeler sırayla iki listeye de sahip, yani toplam beş alan var. org.hibernate.exception.ConstraintViolationException: silebilir veya bir üst satır güncellenemiyor:org.springframework.transaction.TransactionSystemException: JPA işlemi yapılamadı, javax.persistence.RollbackException

Neden Olduğu: Ben güncelleme sırasında ben şu istisna olsun, tüm beş kayıtlarını güncellemeniz gerekir. Bir yabancı anahtar kısıtlaması başarısız (new1checklist_property , KISITLAMA FK14E0B84E32ADD034 YABANCI KEY (checklist_property_title) Ben yeni kayıtlar koymak için çocuk kayıtlarını silmek)

checklist_property_title (id) REFERANSLAR.

package com.stie.cmms.domain; 

import java.util.List; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import org.hibernate.annotations.LazyCollection; 
import org.hibernate.annotations.LazyCollectionOption; 
import com.fasterxml.jackson.annotation.JsonIgnore; 

@Entity 
@Table(name = "checklist_header") 
public class ChecklistHeader { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    Long id; 

    @Column(name = "checklist_name") 
    String checklistName; 

    @Column(name = "remarks") 
    String prerequisite; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "equipment") 
    Equipment1 equipment; 

    @JsonIgnore 
    @LazyCollection(LazyCollectionOption.TRUE) 
    @OneToMany(mappedBy = "checklistHeader", cascade = CascadeType.ALL) 
    List<ChecklistFaultDescription> faultDescription; 

    @JsonIgnore 
    @LazyCollection(LazyCollectionOption.TRUE) 
    @OneToMany(mappedBy = "checklistHeader", cascade = CascadeType.ALL) 
    List<ChecklistPropertyTitle> propertyTitles; 

    public List<ChecklistFaultDescription> getFaultDescription() { 
     return faultDescription; 
    } 

    public void setFaultDescription(List<ChecklistFaultDescription> faultDescription) { 
     this.faultDescription = faultDescription; 
    } 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getChecklistName() { 
     return checklistName; 
    } 

    public void setChecklistName(String checklistName) { 
     this.checklistName = checklistName; 
    } 

    public String getPrerequisite() { 
     return prerequisite; 
    } 

    public void setPrerequisite(String prerequisite) { 
     this.prerequisite = prerequisite; 
    } 

    public Equipment1 getEquipment() { 
     return equipment; 
    } 

    public void setEquipment(Equipment1 equipment) { 
     this.equipment = equipment; 
    } 

    public List<ChecklistPropertyTitle> getPropertyTitles() { 
     return propertyTitles; 
    } 

    public void setPropertyTitles(List<ChecklistPropertyTitle> propertyTitles) { 
     this.propertyTitles = propertyTitles; 
    } 
} 

//above is first domain class 
package com.stie.cmms.domain; 

import java.util.List; 
import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import org.hibernate.annotations.LazyCollection; 
import org.hibernate.annotations.LazyCollectionOption; 
import com.fasterxml.jackson.annotation.JsonIgnore; 

@Entity 
@Table(name = "checklist_property_title") 
public class ChecklistPropertyTitle { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    Long id; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "checklist_header") 
    ChecklistHeader checklistHeader; 

    @Column(name = "title") 
    String title; 

    @JsonIgnore 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(mappedBy = "checklistPropertyTitle", cascade = CascadeType.ALL) 
    List<ChecklistProperty> properties; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public ChecklistHeader getChecklistHeader() { 
     return checklistHeader; 
    } 

    public void setChecklistHeader(ChecklistHeader checklistHeader) { 
     this.checklistHeader = checklistHeader; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public List<ChecklistProperty> getProperties() { 
     return properties; 
    } 

    public void setProperties(List<ChecklistProperty> properties) { 
     this.properties = properties; 
    } 
} 

//my third domain class 
// there are five domain class 
package com.stie.cmms.domain; 

import java.util.List; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 
import org.hibernate.annotations.LazyCollection; 
import org.hibernate.annotations.LazyCollectionOption; 
import com.fasterxml.jackson.annotation.JsonIgnore; 

@Entity 
@Table(name = "checklist_fault_description") 
public class ChecklistFaultDescription { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    Long id; 

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    @JoinColumn(name = "checklist_header") 
    ChecklistHeader checklistHeader; 

    @Column(name = "title1") 
    String title1; 

    @JsonIgnore 
    @LazyCollection(LazyCollectionOption.FALSE) 
    @OneToMany(mappedBy = "checklistFaultTitle", cascade = CascadeType.ALL) 
    List<ChecklistFaults> faults; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public ChecklistHeader getChecklistHeader() { 
     return checklistHeader; 
    } 

    public void setChecklistHeader(ChecklistHeader checklistHeader) { 
     this.checklistHeader = checklistHeader; 
    } 

    public String getTitle1() { 
     return title1; 
    } 

    public void setTitle1(String title1) { 
     this.title1 = title1; 
    } 

    public List<ChecklistFaults> getFaults() { 
     return faults; 
    } 

    public void setFaults(List<ChecklistFaults> faults) { 
     this.faults = faults; 
    } 
} 
+0

çağlayan = CascadeType.DELETE sizin neden bu eror çocuğu silmek ama bu hatanın offfcourse ebeveyni –

+0

yılında @ OneToMany toplama orphanRemoval = true ekleyin ama yine aynı sorun –

+0

gösteren çocuğun silinmesi sırasında ortaya çıkar. –

cevap

0
package com.stie.cmms.repositoryImplementation; 

import java.util.ArrayList; 
import java.util.List; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import javax.persistence.PersistenceContextType; 
import javax.persistence.Query; 
import javax.persistence.TypedQuery; 
import javax.persistence.criteria.CriteriaBuilder; 
import javax.persistence.criteria.CriteriaQuery; 
import javax.persistence.criteria.Expression; 
import javax.persistence.criteria.Predicate; 
import javax.persistence.criteria.Root; 

import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import com.stie.cmms.domain.ChecklistFaultDescription; 
import com.stie.cmms.domain.ChecklistHeader; 
import com.stie.cmms.domain.ChecklistProperty; 
import com.stie.cmms.domain.ChecklistPropertyTitle; 
import com.stie.cmms.domain.ChecklistSearchModel; 
import com.stie.cmms.domain.TaskChecklist; 
import com.stie.cmms.domain.Workspace; 
import com.stie.cmms.repositoryInterfaces.CheckListDaoInterface; 

@Repository 
@Transactional 
public class CheckListDaoImpl implements CheckListDaoInterface { 
    private EntityManager entitymanager; 

    public EntityManager getEntitymanager() { 
     return entitymanager; 
    } 

    @PersistenceContext 
    public void setEntitymanager(EntityManager entitymanager) { 
     this.entitymanager = entitymanager; 
    } 

    @Override 
    public List<ChecklistHeader> listAll() { 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("Select l from ChecklistHeader l"); 
     return d.getResultList(); 
    } 

    @Override 
    public ChecklistHeader save(ChecklistHeader b) { 

     entitymanager.persist(b); 

     return b; 

    } 

    @Override 
    public boolean remove(long id) throws Exception { 
     // entitymanager.remove(entitymanager.find(ChecklistHeader.class, id)); 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("DELETE FROM ChecklistHeader c WHERE c.id=:id"); 
     d.setParameter("id", id); 
     d.executeUpdate(); 
     return true; 
    } 

    @Override 
    public ChecklistHeader find(long id) { 
     return entitymanager.find(ChecklistHeader.class, id); 

    } 

    @Override 
    public ChecklistHeader update(ChecklistHeader b) { 
     return entitymanager.merge(b); 

    } 

    @Override 
    public long count(Workspace w) { 
     // TODO Auto-generated method stub 
     TypedQuery d = (TypedQuery) entitymanager 
       .createQuery("Select count(l) from ChecklistHeader l where l.workspace=:w"); 
     d.setParameter("w", w); 
     return (Long) d.getResultList().get(0); 

    } 

    @Override 
    public List<ChecklistHeader> getCostPage(int from, int to, Workspace w) { 
     // TODO Auto-generated method stub 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("Select c from ChecklistHeader c where c.workspace=:w"); 
     d.setParameter("w", w); 
     return d.setFirstResult(from).setMaxResults(to).getResultList(); 
    } 

    @Override 
    public List<ChecklistHeader> listAllWorkspaceRelated(Workspace w) { 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("Select c from ChecklistHeader c where c.workspace=:w"); 
     d.setParameter("w", w); 
     // System.out.println("cost centre list size with proj id "+w.getId()+" is "+d.getResultList().size()); 
     return d.getResultList(); 
    } 

    @Override 
    public ChecklistHeader getByName(String name) { 
     // TODO Auto-generated method stub 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("Select c from ChecklistHeader c where c.checklistName=:name"); 
     d.setParameter("name", name); 
     ArrayList<ChecklistHeader> checkList = (ArrayList<ChecklistHeader>) d 
       .getResultList(); 
     // System.out.println("total records" + checkList.size()); 
     if (checkList.isEmpty()) 
      return null; 
     else 
      return checkList.get(0); 
    } 

    @Override 
    public void update(TaskChecklist checklist) { 
     entitymanager.merge(checklist); 
    } 

    @Override 
    public List<ChecklistHeader> listAll(Long id) { 
     TypedQuery<ChecklistHeader> d = (TypedQuery<ChecklistHeader>) entitymanager 
       .createQuery("Select c from ChecklistHeader c where c.equipment.id=:id"); 
     d.setParameter("id", id); 
     return d.getResultList(); 
    } 

    @Override 
    public void remove(ChecklistProperty cp) { 
     entitymanager.remove(cp); 
    } 

    @Override 
    public void removeChecklistProperties(ChecklistHeader u) { 

     //removingVal(u); 
     try { 
      System.out.println("id is"+ u.getId()); 

      Query q = entitymanager 
        .createQuery(
          "DELETE FROM ChecklistPropertyTitle c WHERE c.checklistHeader.id=:id"); 
      q.setParameter("id", u.getId()); 





      //q.executeUpdate(); 



     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public Long count(ChecklistSearchModel cSearchModel) { 
     TypedQuery<ChecklistHeader> query = createSearchCriteriaQuery(cSearchModel); 
     return (long) query.getResultList().size(); 
    } 

    private TypedQuery<ChecklistHeader> createSearchCriteriaQuery(
      ChecklistSearchModel cSearchModel) { 
     CriteriaBuilder cb = entitymanager.getCriteriaBuilder(); 
     CriteriaQuery<ChecklistHeader> cq = cb 
       .createQuery(ChecklistHeader.class); 
     Root<ChecklistHeader> fromCheck = cq.from(ChecklistHeader.class); 
     List<Predicate> predicates = new ArrayList<Predicate>(); 

     predicates.add(cb.equal(
       fromCheck.<Workspace> get("equipment").get("workspace"), 
       cSearchModel.getWorkspace())); 

     if (cSearchModel.getChecklistName() != null) 
      if (!cSearchModel.getChecklistName().isEmpty()) { 
       predicates.add(cb.like((Expression<String>) fromCheck 
         .<String> get("checklistName"), 
         "%" + cSearchModel.getChecklistName() + "%")); 
      } 

     if (cSearchModel.getBuilding() != null) 
      predicates.add(cb.equal(fromCheck.get("equipment").get("building") 
        .get("id"), cSearchModel.getBuilding().getId())); 

     if (cSearchModel.getLocation() != null) 
      predicates.add(cb.equal(fromCheck.get("equipment").get("location") 
        .get("id"), cSearchModel.getLocation().getId())); 
     if (cSearchModel.getSystem() != null 
       && (!cSearchModel.getSystem().equals(""))) { 
      predicates.add(cb.equal(
        fromCheck.get("equipment").get("equipmentType"), 
        cSearchModel.getSystem())); 
     } 
     if (cSearchModel.getSubSystem() != null) { 
      predicates.add(cb.equal(fromCheck.get("equipment").get("subtype") 
        .get("id"), cSearchModel.getSubSystem().getId())); 
     } 
     if (cSearchModel.getEquipment() != null) 
      predicates.add(cb.equal(fromCheck.get("equipment").get("id"), 
        cSearchModel.getEquipment().getId())); 
     cq.select(fromCheck).where(predicates.toArray(new Predicate[] {})); 
     return entitymanager.createQuery(cq); 
    } 

    @Override 
    public List<ChecklistHeader> getPage(ChecklistSearchModel cSearchModel, 
      Integer from, Integer rows) { 
     TypedQuery<ChecklistHeader> query = createSearchCriteriaQuery(cSearchModel); 
     return query.setFirstResult(from).setMaxResults(rows).getResultList(); 
    } 

    @Override 
    public boolean isAssigned(ChecklistHeader checklist) { 
     TypedQuery<Long> d = (TypedQuery<Long>) entitymanager 
       .createQuery("Select count(c) from TaskChecklist c where c.checklistProperty.checklistPropertyTitle.checklistHeader.id=:id"); 
     d.setParameter("id", checklist.getId()); 
     if (d.getSingleResult() < 1) 
      return false; 
     else 
      return true; 
    } 

    @Override 
    public List<ChecklistPropertyTitle> findPropertyTitles(
      ChecklistHeader chklistHeader) { 
     TypedQuery<ChecklistPropertyTitle> d = (TypedQuery<ChecklistPropertyTitle>) entitymanager 
       .createQuery("Select l from ChecklistPropertyTitle l where l.checklistHeader.id=:id"); 
     d.setParameter("id", chklistHeader.getId()); 
     return d.getResultList(); 
    } 

    @Override 
    public List<ChecklistFaultDescription> findFaultDescription(
      ChecklistHeader chklistHeader) { 
     // TODO Auto-generated method stub 

      TypedQuery<ChecklistFaultDescription> d = (TypedQuery<ChecklistFaultDescription>) entitymanager 
        .createQuery("Select l from ChecklistFaultDescription l where l.checklistHeader.id=:id"); 
      d.setParameter("id", chklistHeader.getId()); 
      return d.getResultList(); 
    } 

    @Override 
    public boolean isAssignedF(ChecklistHeader checklist) { 
     // TODO Auto-generated method stub 
     TypedQuery<Long> d = (TypedQuery<Long>) entitymanager 
       .createQuery("Select count(c) from TaskChecklist c where c.checklistfaults.checklistFaultTitle.checklistHeader.id=:id"); 
     d.setParameter("id", checklist.getId()); 
     if (d.getSingleResult() < 1) 
      return false; 
     else 
      return true; 
    } 

    public void removingVal(ChecklistHeader u) 
    { 
     Query q = entitymanager 
       .createQuery(
         "DELETE FROM ChecklistFaultDescription c WHERE c.checklistHeader.id=:id"); 
     q.setParameter("id", u.getId()); 

     q.executeUpdate(); 
    } 

    @Override 
    public void delete(Class clazz, Long id) { 
     // TODO Auto-generated method stub 
     Query q = entitymanager 
       .createQuery(
         "DELETE FROM " + clazz.getName() + " c WHERE c.checklistHeader.id=:id"); 
     q.setParameter("id", id); 

     q.executeUpdate(); 
    } 


} 
+0

atar İlk silme işleminde yürütme güncellemesi yapmak –