OneToMany 一端复合主键做多端的外键

一端有个复合主键,作为多端的外键,数据表如下:


代码:

复合主键的定义:

@Embeddable
public class SupplierArticlePK
                implements Serializable {

    private int supplierId;

    private String supplierArticleId;

}

一端的定义:

@Entity
@Table( name = "supplier_article" )
public class SupplierArticle {

    @Id
    private SupplierArticlePK supplierArticlePK;

    @Enumerated( EnumType.STRING )
    private BusinessModel businessModel;

    @OneToMany( cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER )
    @JoinColumns( {

                    @JoinColumn( name = "parentSupplierId", referencedColumnName = "supplierId" ),
                    @JoinColumn( name = "parentSupplierArticleId", referencedColumnName = "supplierArticleId" )
    } )
    private Set<PurchasePrice> purchasePrices = new HashSet<>();

    private int forwardingAgency;

}

多端的定义:

@Entity
@Table( name = "purchase_price" )
public class PurchasePrice {

    @ManyToOne
    @JoinColumns( {
                    @JoinColumn( name = "parentSupplierId", referencedColumnName = "supplierId" ),
                    @JoinColumn( name = "parentSupplierArticleId", referencedColumnName = "supplierArticleId" )
    } )
    public SupplierArticle supplierArticle; //unidirectional

    @Id
    @GeneratedValue
    private int id;

    @Enumerated( EnumType.STRING )
    private SalePriceType salePriceType;

    @Temporal( TemporalType.DATE )
    private Date validFromDate;

    @Temporal( TemporalType.DATE )
    private Date validToDate;

    private BigDecimal value;

    private String currency;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容