MultiModalShipment.java

package com.tradecloud.domain.shipment;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.container.ShipmentContainer;
import com.tradecloud.domain.model.shipment.ShippingMode;
import com.tradecloud.domain.place.City;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

import javax.persistence.*;
import java.util.Date;
import java.util.LinkedHashSet;
import java.util.Set;

@Entity
@Getter
@Setter
@NoArgsConstructor
public class MultiModalShipment extends PersistenceBase {

    @ManyToOne
    private Shipment shipment;

    @OneToMany(cascade = {CascadeType.ALL}, orphanRemoval = true, fetch = FetchType.LAZY)
    @Fetch(value = FetchMode.SELECT)
    @OrderBy("created")
    private Set<ShipmentContainer> containers = new LinkedHashSet<ShipmentContainer>();

    @Embedded
    private Transport transport = new Transport();
    @ManyToOne
    private City placeOfReceipt;
    @ManyToOne
    private City placeOfIssue;
    @Enumerated(value = EnumType.STRING)
    private ShippingMode shippingMode;
/*    @Enumerated(EnumType.ORDINAL)
    private Incoterm incoterm;*/

    private String reference;

    private String houseBillReference;     //– rail consignment note same as 
    private String masterBillReference;

    private Date houseBillDate;
    private Date masterBillDate;

    public Transport getTransport() {
        if (transport == null)
            transport = new Transport();
        return transport;
    }

    public void addContainer(ShipmentContainer container) {
        container.setModalShipment(this);
        containers.add(container);
    }

    public void removeContainer(ShipmentContainer container) {
        container.setModalShipment(null);
        containers.remove(container);
    }
}