sharp-database中的BaseDAOImpl通过注解@Embedded实现实体的”组件”

@Embedded 作用是将一个POJO作为实体的组成部分,但还是生成一张表。与 @ManyToOne OneToMany 不同的是,它们会生成新的表。

示例如下:

Company.java

  1. @Getter
  2. @Setter
  3. @NoArgsConstructor
  4. @AllArgsConstructor
  5. @SuperBuilder
  6. @Table(value = "t_company", comment = "公司")
  7. public class Company extends SimpleEntity {
  8. private String name;
  9. private String address;
  10. private String phone;
  11. @Embedded
  12. private ContactPerson contactPerson;
  13. }

ContactPerson.java

  1. @Getter
  2. @Setter
  3. @NoArgsConstructor
  4. @AllArgsConstructor
  5. @Builder
  6. public class ContactPerson {
  7. private String firstName;
  8. @Column(updatable = false)
  9. private String lastName;
  10. @Column("contact_phone")
  11. private String phone;
  12. @OneToMany(subTable = "t_company_vendor", joinValue = "company_id", cascadeInsertOrUpdate = true, reversePropertyName = "companyId")
  13. private List<Vendor> vendorList;
  14. }

ContactPerson 只是 Company 的组成部分,本身不会生成新的表。
下面的示例 @Embedded,从数据库层面的设计,下面等价。

  1. @Getter
  2. @Setter
  3. @NoArgsConstructor
  4. @AllArgsConstructor
  5. @SuperBuilder
  6. @Table(value = "t_company", comment = "公司")
  7. public class Company extends SimpleEntity {
  8. private String name;
  9. private String address;
  10. private String phone;
  11. private String firstName;
  12. @Column(updatable = false)
  13. private String lastName;
  14. @Column("contact_phone")
  15. private String phone;
  16. @OneToMany(subTable = "t_company_vendor", joinValue = "company_id", cascadeInsertOrUpdate = true, reversePropertyName = "companyId")
  17. private List<Vendor> vendorList;
  18. }