Handel并在hibernate中实现两种类型的用户:spring boot和security
我是spring boot和hibernate的初学者,我正在开发我的第一个应用程序,在hibernate中设计关系时遇到了问题 我有两个用户(广告客户和学生)都有共享属性,但有一个不同,广告客户属于组织,但学生属于大学(关系如下图数据库图所示) 我曾经尝试过创建一个用户类,但是其中引用了广告客户和学生,Featch类型为LAZY,所以我检查了用户的类型,当它是广告客户时,获取广告客户对象,否则为学生对象 代码如下 -但我很困惑,在hibernate中实现不同用户类型的正确方法是什么? -根据设计模式原则,这是一个好的代码设计吗? -如果我想让User class@Embaddable,让广告商和学生继承它,这样我就可以去掉数据库中的User表,那么在spring安全中,我必须访问两个表才能得到用户,这会比以前更好吗Handel并在hibernate中实现两种类型的用户:spring boot和security,hibernate,spring-boot,design-patterns,spring-security,hibernate-mapping,Hibernate,Spring Boot,Design Patterns,Spring Security,Hibernate Mapping,我是spring boot和hibernate的初学者,我正在开发我的第一个应用程序,在hibernate中设计关系时遇到了问题 我有两个用户(广告客户和学生)都有共享属性,但有一个不同,广告客户属于组织,但学生属于大学(关系如下图数据库图所示) 我曾经尝试过创建一个用户类,但是其中引用了广告客户和学生,Featch类型为LAZY,所以我检查了用户的类型,当它是广告客户时,获取广告客户对象,否则为学生对象 代码如下 -但我很困惑,在hibernate中实现不同用户类型的正确方法是什么? -根据
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Column(nullable = false) @Enumerated(EnumType.STRING)
private AccountState state;
@Column(nullable = false) @Enumerated(EnumType.STRING)
private UserType type;
@Column(nullable = false)
private String firstName;
@Column(nullable = false)
private String lastName;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false) @Temporal(TemporalType.DATE)
private Date birthday;
@Column(nullable = false)
private String password;
@Transient
private String confirmPass;
@OneToOne(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Advertiser advertiser;
@OneToOne(mappedBy = "user", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Student student;
// setters and getters
}
@Entity
public class Advertiser {
@EmbeddedId
private AdvertiserId advertiserId;
@OneToOne
@JoinColumn(name = "user_id", insertable = false, updatable = false)
private User user;
@ManyToOne
@JoinColumn(name = "organization_id", insertable = false, updatable = false)
private Organization organization;
// setter and getter
}
@Entity
public class Student{
@EmbeddedId
private StudentId studentId;
@OneToOne
@JoinColumn(name = "user_id", insertable = false, updatable = false)
private User user;
@ManyToOne
@JoinColumn(name = "university_id", insertable = false, updatable = false)
private University university;
// setter and getter
}
不必为学生和广告客户指定特定的表。您可以使用类似is_student的标志列。基于此,您可以实现您的逻辑。这里有一个FIELD call userType