gpt4 book ai didi

Java继承Hibernate实体

转载 作者:行者123 更新时间:2023-11-29 09:32:32 25 4
gpt4 key购买 nike

背景:我正在构建一个网络应用程序,允许教师通过许多分析功能对学生进行测验,以帮助衡量个人/类(class)在测试/测验中的表现。目前,我正在重新设计 MySQL DB 架构,您可以看到我迄今为止构建的基本 EEF 图,包括:MySQL EEF Diagram for DB

我实际上正在使用 Hibernate 创建从后端到数据库的连接,但此 EEF 图很好地显示了表之间的关系。

问题目前,我为管理员、学生和教师设置了单独的表,因为这三个表都具有独特的字段,尽管目前它们具有非常相似的字段。拥有 3 个不同表格的问题是我希望教师和学生共享一些功能。例如,教师应该能够像学生一样参加测验(出于测试目的)。我的第一直觉是创建一个学生和教师都扩展的用户类:

 public class User{
...
}
@Entity
@Table(name="student")
public class Student extends User{
...
}
@Entity
@Table(name="teacher")
public class Teacher extends User{
...
}

这种方法实现了我想要通过测验服务实现的目标:

public QuizInstance takeQuiz(User u, QuizStructure struct){
...
}

但我不确定当涉及多态性时如何创建映射关系。此问题的一个很好的例子是 registerUser 服务:

public void registerUser(User u, String password) {
if(u instanceof Teacher) {
//register User into Teacher Table..
}else if(u instanceof Student) {
//register User into Student Table...
}
new LoginService().createLogin(u, password);
}
public class LoginService{
...
public void createLogin(User u, String password){
Login l = new Login();
l.setEncrPass(encrypt(password));
l.setEmail(u.getEmail());
if(u instanceof Teacher)
l.setRole("teacher");
else
l.setRole("student");
l.setUser(u);

//Save Login into Login Table in DB
}
}
@Entity
@Table(name="login")
public class Login {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="user_id", unique=true, nullable=false)
private int id;

@Column(name="email", nullable=false)
private String email;

@Column(name="encrypted_pass", nullable=false)
private String encryptedPass;

@Column(name="role", nullable=false)
private String role;

//How do I map User if it can link to either the Teacher table or the Student Table???
private User user;
}

我怀疑这是否是解决问题的最佳方法。我不禁感到震惊的是,我的数据库模式的设计在安全性和结构方面是一个问题。有人可以告诉我我构建的数据库架构是否工艺较差,如果是的话,请分享一些示例/资源,以更好地帮助说明更安全的数据库架构。

最佳答案

这里有一些建议,

  • 此场景需要基本的 RBAC(基于角色的访问控制)。
  • 所有用户,即学生、教师、管理员等本质上都是系统的用户,他们都需要登录。
  • 因此,您需要一个定义一组角色的表,即管理员、教师、学生等。
  • 对于所有用户,一个用户表就足够了。该用户表将具有角色作为属性。
  • 出于安全考虑,即检查是否允许用户访问给定资源或执行操作,可以通过检查其角色来完成。例如。管理员将有权访问教师和学生无权访问的某些页面/操作。

关于Java继承Hibernate实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com