package cyrille.hibernate.temporal.sinistre; import java.sql.Timestamp; import javax.persistence.CascadeType; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; import org.apache.commons.lang.builder.ToStringBuilder; @Entity /* * @Table(name="dommage_corporel") */ @DiscriminatorValue(value = "dommage_corporel") public class DommageCorporel extends Dommage { @Transient protected DommageCorporelVersion dommageCorporelworkingCopy; @ManyToOne(cascade = CascadeType.ALL, optional = false) @JoinColumn(name = "last_dommage_corporel_vers_id", nullable = false) protected DommageCorporelVersion lastDommageCorporelVersion; public DommageCorporel() { super(); } public DommageCorporel(String codeTypeDommage) { super(codeTypeDommage); } public String getCodeNatureMaladie() { return getCurrentDommageCorporelVersion().getCodeNatureMaladie(); } protected DommageCorporelVersion getCurrentDommageCorporelVersion() { return this.lastDommageCorporelVersion; } public synchronized DommageCorporelVersion getDommageCorporelVersionWorkingCopy() { if (this.dommageCorporelworkingCopy == null) { DommageCorporelVersion currentDommageCorporelVersion = getCurrentDommageCorporelVersion(); DommageCorporelVersion newWorkingCopy; if (currentDommageCorporelVersion == null) { newWorkingCopy = new DommageCorporelVersion(); } else { newWorkingCopy = currentDommageCorporelVersion.copy(); } newWorkingCopy.setDateSituation(new Timestamp(System.currentTimeMillis())); // add forward linking here // no exception during working copy initialization, associate this.lastDommageCorporelVersion = newWorkingCopy; this.dommageCorporelworkingCopy = newWorkingCopy; } return dommageCorporelworkingCopy; } public void setCodeNatureMaladie(String codeNatureMaladie) { getDommageCorporelVersionWorkingCopy().setCodeNatureMaladie(codeNatureMaladie); } @Override public String toString() { return new ToStringBuilder(this).append("id", this.id).append("codeTypeDommage", this.codeTypeDommage).append( "lastDommageVersion", this.lastDommageVersion).append("sinistre", this.sinistre).toString(); } }