我正在開發一個處理分發管理的 Spring Boot 應用程式。有 3 種型別的用戶將與系統互動 - 管理員、分銷商和零售商。
- 一個公司只能有一個管理員。
- 特定公司的一個城市只能有一個經銷商。
- 零售商可以與特定城市的不同公司的經銷商聯系。
現在,對于這些東西。我創建了 5 個類 - 用戶、角色、管理員、分銷商和零售商。可以請任何人建議我應該如何在設計所需的類方面解決這個問題。我最初嘗試過,但我仍然認為這個類結構本身很復雜。是否有我遺漏的東西,或者是否有任何設計模式可以使事情變得更加不穩定?
@Entity
@Table(name = "tbl_User")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@NotNull(message = "first Name cannot be null")
@Column(name = "first_Name")
private String firstName;
@NotNull(message = "last Name cannot be null")
@Column(name = "last_Name")
private String lastName;
@ManyToOne()
@JoinColumn(name = "role_Id")
private Role role;
@NotNull
@Size(min = 10, max = 10, message = "Contact must be of 10 characters")
@Column(name = "contact")
private String contact;
@NotNull
@Email(message = "Email should be valid")
@Column(name = "email", unique = true)
private String email;
@NotNull
@Size(min = 10, max = 255,
message = "Local address must be between 10 and 255 characters")
@Column(name = "local_Address")
private String localAddress;
@ManyToOne()
@JoinColumn(name = "city_Id")
private City city;
@NotNull
@Column(name = "user_Name")
private String userName;
@NotNull
@Column(name = "password")
private String password;
@Column(name = "registered_On")
private LocalDateTime registeredOn;
@Column(name = "updated_On")
private LocalDateTime updatedOn;
@Column(name = "approved_By")
private Long approvedBy;
@NotNull
@Size(min = 1, max = 1,
message = "Approval status must be of 1 character.")
@Column(name = "approval_Status")
private String approvalStatus;
@NotNull
@Column(name = "active_Status")
private boolean activeStatus;
@Transient
private Company company;
}
@Entity
@Table(name = "tbl_Administrator")
public class Admin {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int adminId;
@OneToOne()
@JoinColumn(name = "user_Id")
private User user;
@OneToOne()
@JoinColumn(name = "company_Id")
private Company company;
}
@Entity
@Table(name = "tbl_Distributor")
public class Distributor {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long distributorId;
@OneToOne()
@JoinColumn(name = "user_Id")
private User user;
@ManyToOne()
@JoinColumn(name = "company_Id")
private Company company;
}
@Entity
@Table(name = "tbl_Retailer")
public class Retailer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long retailerId;
@OneToOne()
@JoinColumn(name = "user_Id")
private User user;
}
uj5u.com熱心網友回復:
我會選擇一個@MappedSuperclass而不是制作User和物體本身。基本上,Admin,Distributor并且Retailer會擴展這個映射的超類。為每個創建單獨的表,但沒有為超類 ( User) 本身創建表。
@MappedSuperclass
public class User {
// Your properties
}
@Entity
@Table(name = "tbl_Administrator")
public class Admin extends User {
@OneToOne()
@JoinColumn(name = "company_Id")
private Company company;
}
@Entity
@Table(name = "tbl_Distributor")
public class Distributor extends User {
@ManyToOne()
@JoinColumn(name = "company_Id")
private Company company;
}
@Entity
@Table(name = "tbl_Retailer")
public class Retailer extends User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long retailerId;
}
您還有其他可能性(在https://medium.com/analytics-vidhya/jpa-hibernate-entity-inheritance-1f6aa7ea2eea閱讀更多資訊),例如以下內容:
- 所有物體的單個表
- 超類和子類的單獨表。超類中定義的屬性不包含在子類的表中。
- 類表,類似于映射超類,不同的是超類也有對應的表。
盡管如此,我還是會像描述的那樣使用 Mapped Superclass 之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/350026.html
