CostableCostDefinition.java

package com.tradecloud.domain.costing;

import com.tradecloud.domain.model.ordermanagement.Consignment;
import com.tradecloud.domain.shipment.Shipment;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.Date;

@Entity
@Table(name = "costablecostdefinition")
@Access(AccessType.FIELD)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "CostableCostDefinition")
@SuperBuilder
@NoArgsConstructor
public class CostableCostDefinition extends CostDefinition {

    @OneToOne
    @ForeignKey(name = "fk_consignment")
    @XmlTransient
    private Consignment consignment;

    @OneToOne(fetch = FetchType.LAZY)
    @ForeignKey(name = "fk_shipment")
    @XmlTransient
    private Shipment shipment;

    private Date lastUpdateTime;

    public CostableCostDefinition(CostDefinition costDefinition) {
        this.setCostingContextType(costDefinition.getCostingContextType());
        this.setIncoterm(costDefinition.getIncoterm());
        this.setCountryGroup(costDefinition.getCountryGroup());
        this.setOrganisationalUnit(costDefinition.getOrganisationalUnit());
        this.setShippingMode(costDefinition.getShippingMode());
        this.setMultiModalShippingMode(costDefinition.getMultiModalShippingMode());
        this.setCountryGroup(costDefinition.getCountryGroup());
    }

    public Consignment getConsignment() {
        return consignment;
    }

    public void setConsignment(Consignment consignment) {
        this.consignment = consignment;
    }

    public Shipment getShipment() {
        return shipment;
    }

    public void setShipment(Shipment shipment) {
        this.shipment = shipment;
    }

    public Date getLastUpdateTime() {
        return lastUpdateTime;
    }

    public void setLastUpdateTime(Date lastUpdateTime) {
        this.lastUpdateTime = lastUpdateTime;
    }
}