2016-04-04 14 views
0

以下に5つのドメインクラス(動的プログラミング)があります。私はレコードのチェックリストのヘッダーを2つのリストで更新する必要があります。これらのリストにも2つのリストがあり、合計5つのドメインがあります。 org.hibernate.exception.ConstraintViolationException:によって引き起こさorg.springframework.transaction.TransactionSystemException:JPAトランザクションをコミットできませんでした。javax.persistence.RollbackException

:私は、アップデート中に、私は次の例外を取得し、すべての5つのレコードを更新する必要がある親行を削除または更新できません:。外部キー制約が失敗した(new1checklist_property 、CONSTRAINT FK14E0B84E32ADD034 FOREIGN KEY(checklist_property_titleは)私は新しいレコードを置くために子レコードを削除)

checklist_property_titleid)を参照します。

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

カスケード= CascadeType.DELETEあなたによって引き起こされ、このEROR子を削除しても、このエラーofffcourse親 –

+0

で@OneToManyコレクションorphanRemoval = trueを追加しますが、それでも同じ問題 –

+0

を示します子供の削除中に発生します。 –

答えて

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

にもスローされます。最初の削除操作で実行更新を実行する –

関連する問題