这个案子我需要帮助。
我有以下实体(为了便于阅读,我删除了getter/setter/hash/toString):
@Entity
public class Company implements Serializable{
@Id
private String id;
}
@Entity
public class Document implements Serializable{
@Id
private String id;
}
@Entity
@IdClass(Inbox.PK.class)
public class Inbox implements Serializable {
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Company company;
@Id
@ManyToOne(fetch = FetchType.LAZY)
private Document document;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "inbox")
private Invoice invoice;
public class PK implements Serializable{
private Company company;
private Document document;
}
}
第一个问题是,我应该在PK类中使用Company和Document类型还是String和String?
这里......头痛的是:
@Entity
@IdClass(Invoice.PK.class)
public class Invoice implements Serializable {
@Id
@OneToOne(fetch = FetchType.LAZY, mappedBy = "invoice")
// @MapsId // ???
@JoinColumn(name = "companyId")//, referencedColumnName = "company")// ???
@JoinColumn(name = "documentId")//, referencedColumnName = "document")// ???
// @PrimaryKeyJoinColumn // ????
private Inbox inbox;
@Data
public static class PK implements Serializable {
// private Inbox inbox; // ???
// private String company,document; // ???
// private String companyId,documentId; // ???
// private String inboxCompanyId,inboxDocumentId; // ???
}
}
发票实体的主键也是到收件箱的FK(我希望生成约束),收件箱的主键由两个实体组成(公司和单据)。
我更喜欢使用IdClass而不是EmbeddedId。
如何配置发票,使其末尾的(company_id,document_id)作为收件箱的PK和FK?
1条答案
按热度按时间dxpyg8gm1#
我在upwork上看到了你的问题。我认为你应该在PK类中使用字符串+字符串类型的字段,并带有@Id和@Column注解。