2016-02-17 2 views
0

Я хочу, чтобы вычесть значение из другого поля каждый раз, когда я добавить новую запись это мой случай: примерКак вычесть два поля в один ко многим отношению

soldeJours (от лица Contrat) = nbjours (от лица Contrat) - dureeAssistance (от помощи лиц):

Exemple:

nbjours = 20, и когда я добавляю новую помощь dureeassistance = 5 soldeJours = 15, когда добавить еще помощь durée помощи = 3 soldeJours = 12

Каждый раз, когда я добавляю новую запись в помощь, она автоматически уменьшается и сохраняется в 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; 
    } 
} 

и вот моя Entity помощи :

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, String etatAssistance, Строка idAssistance, String ingAff, String ouvertPar, String sujetAss, String отд, String клиент, 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); 

       } 
+0

У вас есть отношение @OneToMany от договора к Сопротивлению, поэтому для получения нужных значений от нуля до n. Поэтому прежде всего вам нужно убедиться, какие из этих значений вы хотите вычесть. В общем, существует несколько возможных решений, таких как @ PrePersist и/или @ PreUpdate, но для более подробного ответа на этот вопрос вы должны уточнить свой вопрос. – grange

+0

в сущности contrat у нас есть период (nbjours), и каждый contrat может иметь поддержку 0 или N в вспомогательном объекте, который у нас есть (dureeassistance) в каждый раз, когда мы сохраняем новую помощь, которую мы продали jours = nbjours, - dureeassistance, конечно, каждая помощь иметь внешний ключ, который ссылается на contrat – 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); 

     } 
    } 
Смежные вопросы