我想從另一個字段每個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);
}
您有從合同到Assistance的@OneToMany關係,因此有0到n個可能的幫助值。所以首先你需要確定你想要減去哪些值。 一般來說,有幾種可能的解決方案,比如@ PrePersist和/或@ PreUpdate,但要更詳細地回答它,您必須澄清您的問題。 – grange
在對等實體中,我們有一個periode(nbjours),每個contrat可以在我們的輔助實體(dureeassistance)中有0或N的幫助,每次我們堅持一個新的協助時,我們都有soldes jours = nbjours - 當然每個輔助的dureeassistance有一個引用該對照的外鍵 – user3419507