工作版本:
@Entity
public class Customer {
@EmbeddedId
private CustomerPk id;
@Column(name = "NAME")
private String name;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "customerDetails")
private List<Purchase> purchaseDetails;
}
@Embeddable
public class CustomerPk implements Serializable {
@Column(name = "CUSTOMER_ID")
private String customerId;
@Column(name = "PURCHASE_ID")
private String productId;
@Column(name = "PURCHASE_DATE")
private String date;
}
@Entity
public class Purchase {
@EmbeddedId
private PurchasePK id;
@Column(name = "TRANSACTION_NAME")
private String transactionName;
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID", insertable = false, updatable = false),
@JoinColumn(name = "PURCHASE_ID", referencedColumnName = "PURCHASE_ID", insertable = false, updatable = false),
@JoinColumn(name = "PURCHASE_DATE", referencedColumnName = "PURCHASE_DATE", insertable = false, updatable = false)
})
private Customer customerDetails;
}
@Embeddable
public class PurchasePK implements Serializable {
@Column(name = "CUSTOMER_ID")
private String customerId;
@Column(name = "PURCHASE_ID")
private String productId;
@Column(name = "TRANSACTION_DATE")
private String date;
}
结论
提供的信息来自
射线
有效,您错过了添加所需的连接列以表示完整的实体关系,关于您的注释
射线
重点,是的,你是对的,两列的用法不同,但两列都有自己的名称,在运行时不会覆盖任何行值。
以上表格和表示的结果如下:
create table customer
(
customer_id varchar(255) not null,
purchase_date varchar(255) not null,
purchase_id varchar(255) not null,
name varchar(255),
primary key (customer_id, purchase_date, purchase_id)
);
create table purchase
(
customer_id varchar(255) not null,
transaction_date varchar(255) not null,
purchase_id varchar(255) not null,
transaction_name varchar(255),
purchase_date varchar(255),
primary key (customer_id, transaction_date, purchase_id)
);
alter table purchase
add constraint FK6rkrb8rq8x56kai7g5gm32d1y foreign key (customer_id, purchase_date, purchase_id) references customer;