ServiceFee.java

package com.tradecloud.domain.model.organisationalunit.tradefinance;

import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.model.organisationalunit.OrganisationalUnit;
import org.hibernate.annotations.ForeignKey;

import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlIDREF;
import java.math.BigDecimal;
import java.util.Date;

/**
 * Created by ds on 2017/06/20.
 */
@Entity
@Table(name = "servicefee", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"effectiveDate", "organisationalUnit_id"})})
public class ServiceFee extends PersistenceBase implements TradeFinanceRate {

    private BigDecimal rate;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(unique = true, name = "effectiveDate")
    private Date effectiveDate;

    @ManyToOne(fetch = FetchType.LAZY)
    @ForeignKey(name = "fk_organisationalUnit")
    @NotNull(message = "Parent organisational unit should not be null")
    @XmlAttribute(required = true)
    @XmlIDREF
    private OrganisationalUnit organisationalUnit;

    public ServiceFee() {
    }

    public ServiceFee(BigDecimal rate, Date effectiveDate) {
        this.rate = rate;
        this.effectiveDate = effectiveDate;
    }

    public Date getEffectiveDate() {
        return effectiveDate;
    }

    public void setEffectiveDate(Date effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public BigDecimal getRate() {
        return rate;
    }

    public void setRate(BigDecimal rate) {
        this.rate = rate;
    }

    public OrganisationalUnit getOrganisationalUnit() {
        return organisationalUnit;
    }

    public void setOrganisationalUnit(OrganisationalUnit organisationalUnit) {
        this.organisationalUnit = organisationalUnit;
    }
}