我正在开发一个涉及分发管理的spring引导应用程序。有3种类型的用户谁将与系统互动-管理,经销商和零售商。
company.
现在,为了这些东西。我已经创建了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;
}发布于 2021-11-05 22:25:23
我将使用@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中的更多内容),如下所示:
用于超类和子类的所有entities
不过,我还是会按照描述的那样使用映射的Superclass 1。
https://stackoverflow.com/questions/69851361
复制相似问题