@Getter
@Entity
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@ToString(onlyExplicitlyIncluded = true)
@Table(name = "SPECIAL_OPERATOR_PRICES_POINTS")
@IdClass(SpecialPricePoint.SpecialPricePointPK.class)
@NoArgsConstructor(access = PROTECTED)
public class SpecialPricePoint {
public SpecialPricePoint(SpecialOperator operator,
String wholesalePrice) {
this.operator = operator;
this.wholesalePrice = wholesalePrice;
}
@ManyToOne
@ToString.Include
@Setter(PACKAGE)
@EqualsAndHashCode.Include
@JoinColumn(name = "PROVIDER_ID", referencedColumnName = "PROVIDER_ID")
@JoinColumn(name = "OPERATOR_ID", referencedColumnName = "OPERATOR_ID")
@MapsId
private SpecialOperator operator;
@Column(name = "PRODUCT_ID")
@Setter
private String productId;
@Id
@Column(name = "PRICE_POINT", nullable = false)
@ToString.Include
@EqualsAndHashCode.Include
String wholesalePrice;
@OneToOne(cascade = { PERSIST, MERGE, REMOVE }, orphanRemoval = true)
@JoinColumn(name = "PRODUCT_ID", referencedColumnName = "PRODUCT_ID", updatable = false, insertable = false)
@JoinColumn(name = "PRICE_POINT",
referencedColumnName = "WHOLESALE_PRICE_AMOUNT",
updatable = false,
insertable = false)
@JoinColumn(name = "OPERATOR_ID", referencedColumnName = "OPERATOR_ID", updatable = false, insertable = false)
@JoinColumn(name = "PROVIDER_ID", referencedColumnName = "PROVIDER_ID", updatable = false, insertable = false)
@Cache(usage = READ_WRITE)
private SpecialProduct product;
public void setProduct(SpecialProduct product) {
this.product = product;
this.productId = product.getProductId();
product.setWholesalePrice(this);
}
@Value
@Embeddable
@NoArgsConstructor(access = PROTECTED)
@AllArgsConstructor
public static class SpecialPricePointPK implements Serializable {
@Embedded
@NonFinal
@AttributeOverride(name = "provider", column = @Column(name = "PROVIDER_ID", nullable = false))
@AttributeOverride(name = "operatorId", column = @Column(name = "OPERATOR_ID", nullable = false))
SpecialOperatorPK operator;
@NonFinal
String wholesalePrice;
}
}