2016-02-17 51 views
0

我想從另一個字段每個I添加新記錄這個時間減去一個值是我的情況:例如如何減去在一兩個領域的許多關係

soldeJours(從實體contrat)= nbjours(從實體contrat) - dureeAssistance(從實體援助):

例:

nbjours = 20,當我添加一個新的輔助dureeassistance = 5個soldeJours = 15時添加其他援助綿延援助= 3個soldeJours = 12

每次我在幫助中添加新記錄時,soldejours會自動遞減並保存到db中並顯示在界面中。

PS:我有合同和援助之間的一個一對多的關係(合同可以有一個以上的援助)

這裏是我的實體Contrat

package model.entitie; 

import java.io.Serializable; 

import java.math.BigDecimal; 

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.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.SecondaryTable; 
import javax.persistence.SequenceGenerator; 

@Entity 
@NamedQueries({ @NamedQuery(name = "Contrat.findAll", query = "select o from Contrat o") }) 
@SequenceGenerator(name = "Contrat_Id_Seq_Gen", sequenceName = "CONTRAT_SEQ", allocationSize = 1, initialValue = 50) 
public class Contrat implements Serializable { 
    @SuppressWarnings("compatibility:-6627285401934383829") 
    private static final long serialVersionUID = 1L; 
    @Column(length = 4000) 
    private String annee; 
    @Column(length = 4000) 
    private String client; 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Contrat_Id_Seq_Gen") 
    @Column(name = "ID_CONTRAT", nullable = false, length = 4000) 
    private String idContrat; 
    @Column(length = 4000) 
    private String information; 
    @Column(name = "NB_JOURS") 
    public BigDecimal nbJours; 
    @Column(name = "SOLDE_JOURS") 
    public BigDecimal soldeJours; 
    @Column (name="ETATCON") 
    private String etatCon; 

    public void setEtatCon(String etatCon) { 
     this.etatCon = etatCon; 
    } 

    public String getEtatCon() { 
     return etatCon; 
    } 
    @OneToMany(mappedBy = "contrat" ,cascade=CascadeType.PERSIST) 
    private List<Assistance> assistanceList; 



    public Contrat() { 
    } 

    public Contrat(String annee, String client, String idContrat, String information, BigDecimal nbJours, 
        BigDecimal soldeJours, String etatCon) { 
     this.annee = annee; 
     this.client = client; 
     this.idContrat = idContrat; 
     this.information = information; 
     this.nbJours = nbJours; 
     this.soldeJours = soldeJours; 
     this.etatCon = etatCon; 
    } 

    public String getAnnee() { 
     return annee; 
    } 

    public void setAnnee(String annee) { 
     this.annee = annee; 
    } 

    public String getClient() { 
     return client; 
    } 

    public void setClient(String client) { 
     this.client = client; 
    } 

    public String getIdContrat() { 
     return idContrat; 
    } 

    public void setIdContrat(String idContrat) { 
     this.idContrat = idContrat; 
    } 

    public String getInformation() { 
     return information; 
    } 

    public void setInformation(String information) { 
     this.information = information; 
    } 

    public BigDecimal getNbJours() { 
     return nbJours; 
     } 

    public void setNbJours(BigDecimal nbJours) { 

     this.nbJours = nbJours; 
    } 
    /* 
    public void setSoldeJours(BigDecimal soldeJours) { 
     this.soldeJours = soldeJours.subtract(nbJours); 
    }*/ 

    public BigDecimal getSoldeJours() { 

     return soldeJours; 
    } 

    public void setSoldeJours(BigDecimal soldeJours) { 
     this.soldeJours = soldeJours; 
    } 

    public List<Assistance> getAssistanceList() { 
     return assistanceList; 
    } 

    public void setAssistanceList(List<Assistance> assistanceList) { 
     this.assistanceList = assistanceList; 
    } 

    public Assistance addAssistance(Assistance assistance) { 
     getAssistanceList().add(assistance); 
     assistance.setContrat(this); 
     return assistance; 
    } 

    public Assistance removeAssistance(Assistance assistance) { 
     getAssistanceList().remove(assistance); 
     assistance.setContrat(null); 
     return assistance; 
    } 
} 

,這裏是我的幫助實體:

package model.entitie; 

import java.io.Serializable; 

import java.math.BigDecimal; 

import java.util.Date; 

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.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.OneToMany; 
import javax.persistence.SequenceGenerator; 
import javax.persistence.Temporal; 
import javax.persistence.TemporalType; 

@Entity 
@NamedQueries({ @NamedQuery(name = "Assistance.findAll", query = "select o from Assistance o") }) 
@SequenceGenerator(name = "Assistance_Id_Seq_Gen", sequenceName = "ASSISTANCE_SEQ", allocationSize = 1, 
        initialValue = 50) 
public class Assistance implements Serializable { 
    private static final long serialVersionUID = 7916354262572083045L; 
    @Column(length = 4000) 
    private String client; 
    @Temporal(TemporalType.DATE) 
    @Column(name = "DATE_CREATION") 
    private Date dateCreation; 
    @Column(name = "DUREE_ASSISTANCE") 
    private BigDecimal dureeAssistance; 
    @Column(name = "ETAT_ASSISTANCE", length = 4000) 
    private String etatAssistance; 
    @Id 
    @Column(name = "ID_ASSISTANCE", nullable = false, length = 4000) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "Assistance_Id_Seq_Gen") 
    private String idAssistance; 
    @Column(name = "ING_AFF", length = 4000) 
    private String ingAff; 
    @Column(name = "OUVERT_PAR", length = 4000) 
    private String ouvertPar; 
    @Column(name = "SUJET_ASS", length = 4000) 
    private String sujetAss; 
    @Column(name = "ETATASS", length = 4000) 
    private String etatAss; 
    @Column(name="DEP", length=4000) 
    private String dep; 

    public void setDep(String dep) { 
     this.dep = dep; 
    } 

    public String getDep() { 
     return dep; 
    } 

    public void setEtatAss(String etatAss) { 
     this.etatAss = etatAss; 
    } 

    public String getEtatAss() { 
     return etatAss; 
    } 
    @ManyToOne 
    @JoinColumn(name = "CONTRAT_ID", updatable = true, insertable = true) 
    private Contrat contrat; 
    @OneToMany(mappedBy = "assistance", cascade =CascadeType.PERSIST) 
    private List<Intervention> interventionList; 

    public Assistance() { 
    } 

    public Assistance(Contrat contrat, Date dateCreation, BigDecimal dureeAssistance, String etatAssistance, 
         String idAssistance, String ingAff, String ouvertPar, String sujetAss, String dep,String client) { 
     this.client = client; 
     this.contrat = contrat; 
     this.dateCreation = dateCreation; 
     this.dureeAssistance = dureeAssistance; 
     this.etatAssistance = etatAssistance; 
     this.idAssistance = idAssistance; 
     this.ingAff = ingAff; 
     this.ouvertPar = ouvertPar; 
     this.sujetAss = sujetAss; 
     this.etatAssistance = etatAssistance; 
     this.dep =dep; 

     this.contrat.soldeJours = this.contrat.soldeJours.subtract(this.dureeAssistance); 
    } 

    public String getClient() { 
     return client; 

    } 

    public void setClient(String client) { 
     this.client = client; 
    } 


    public Date getDateCreation() { 
     return dateCreation; 
    } 

    public void setDateCreation(Date dateCreation) { 
     this.dateCreation = dateCreation; 
    } 

    public BigDecimal getDureeAssistance() { 
     return dureeAssistance; 
    } 

    public void setDureeAssistance(BigDecimal dureeAssistance) { 


     // this.contrat.nbJours = this.contrat.soldeJours.subtract(dureeAssistance); 
     this.dureeAssistance = dureeAssistance; 

    } 

    public String getEtatAssistance() { 
     return etatAssistance; 
    } 

    public void setEtatAssistance(String etatAssistance) { 
     this.etatAssistance = etatAssistance; 
    } 

    public String getIdAssistance() { 
     return idAssistance; 
    } 

    public void setIdAssistance(String idAssistance) { 
     this.idAssistance = idAssistance; 
    } 

    public String getIngAff() { 
     return ingAff; 
    } 

    public void setIngAff(String ingAff) { 
     this.ingAff = ingAff; 
    } 

    public String getOuvertPar() { 
     return ouvertPar; 
    } 

    public void setOuvertPar(String ouvertPar) { 
     this.ouvertPar = ouvertPar; 
    } 

    public String getSujetAss() { 
     return sujetAss; 
    } 

    public void setSujetAss(String sujetAss) { 
     this.sujetAss = sujetAss; 
    } 

    public Contrat getContrat() { 
     return contrat; 
    } 

    public void setContrat(Contrat contrat) { 
     this.contrat = contrat; 
    } 

    public List<Intervention> getInterventionList() { 
     return interventionList; 
    } 

    public void setInterventionList(List<Intervention> interventionList) { 
     this.interventionList = interventionList; 
    } 
    public Intervention addIntervention (Intervention intervention) 
    { 
     getInterventionList().add(intervention); 
     intervention.setAssistance(this); 
     return intervention; 
     } 

} 

,這是我堅持怎麼我的實體援助:

公共無效addAssistanceRecord(日期dateCreation,BigDecimal的dureeAssistance,字符串etatAssistance, 字符串idAssistance,字符串ingAff,字符串ouvertPar,字符串sujetAss,字符串DEP,字符串客戶端,字符串idContrat){

Assistance assistance = new Assistance(); 
    assistance.setClient(client); 
    assistance.setDateCreation(dateCreation); 
    assistance.setDep(dep); 
    assistance.setDureeAssistance(dureeAssistance); 
    assistance.setIngAff(ingAff); 
    assistance.setOuvertPar(ouvertPar); 
    assistance.setSujetAss(sujetAss); 
    assistance.setIdAssistance(idAssistance); 
    assistance.setEtatAssistance(etatAssistance); 

    //setting the contratid explicitly 
     Contrat contrat = new Contrat(); 
     contrat.setIdContrat(idContrat); 
      assistance.setContrat(contrat); 

    //persist the assistance object data to ASS table 
    em.persist(assistance); 

       } 
+0

您有從合同到Assistance的@OneToMany關係,因此有0到n個可能的幫助值。所以首先你需要確定你想要減去哪些值。 一般來說,有幾種可能的解決方案,比如@ PrePersist和/或@ PreUpdate,但要更詳細地回答它,您必須澄清您的問題。 – grange

+0

在對等實體中,我們有一個periode(nbjours),每個contrat可以在我們的輔助實體(dureeassistance)中有0或N的幫助,每次我們堅持一個新的協助時,我們都有soldes jours = nbjours - 當然每個輔助的dureeassistance有一個引用該對照的外鍵 – user3419507

回答

0

我發現這個解決方案,它正常工作

public void addAssistanceRecord(Date dateCreation, BigDecimal dureeAssistance, String etatAssistance, 
         String idAssistance, String ingAff, String ouvertPar, String sujetAss, String dep,String client,String idContrat) { 


      Assistance assistance = new Assistance(); 
      assistance.setClient(client); 
      assistance.setDateCreation(dateCreation); 
      assistance.setDep(dep); 
      assistance.setDureeAssistance(dureeAssistance); 
      assistance.setIngAff(ingAff); 
      assistance.setOuvertPar(ouvertPar); 
      assistance.setSujetAss(sujetAss); 
      assistance.setIdAssistance(idAssistance); 
      assistance.setEtatAssistance(etatAssistance); 

      //setting the contratid explicitly 
       Contrat contrat = new Contrat(); 
       contrat.setIdContrat(idContrat); 
        assistance.setContrat(contrat); 

      //persist the assistance object data to ASS table 
      em.persist(assistance); 

          Contrat con1 =assistance.getContrat(); 
          String idCon= con1.getIdContrat(); 
          System.out.println("id contrat "+ idCon); 


     Query query = 
      em.createQuery("SELECT a from Contrat a where a.idContrat =:id"); 

     query.setParameter("id", idCon); 
     Contrat con2 = (Contrat) query.getSingleResult(); 


     System.out.println("id contrat 2 "+ con2.getIdContrat()); 
     System.out.println("nb jr contrat 2 "+ con2.getNbJours()); 

     BigDecimal nbJours = con2.getNbJours(); 
     BigDecimal sldj =con2.getSoldeJours(); 



     if(con2.getSoldeJours()==null){ 
      nbJours = nbJours.subtract(assistance.getDureeAssistance()); 

       con2.setSoldeJours(nbJours); 
        em.merge(con2); 

     } 
     else{ 
       nbJours = sldj.subtract(assistance.getDureeAssistance()); 

        con2.setSoldeJours(nbJours); 
         em.merge(con2); 

     } 
    }