首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate实体的Java继承

问Hibernate实体的Java继承
EN

Stack Overflow用户
提问于 2019-10-15 04:43:07
回答 1查看 178关注 0票数 0

背景:I正在开发一个web应用程序,它允许教师用许多分析功能来测试他们的学生在测试/测验中的个人/班级表现。目前,我正在重新设计MySQL DB模式,您可以看到我到目前为止构建的基本EEF图,包括:

​

实际上,我正在使用Hibernate创建从后端到DB的连接,但是这个EEF图在显示表之间的关系方面做得很好。

The Problem I目前为管理员、学生和教师提供了单独的表,因为这三个表都有独特的字段,尽管目前它们的字段非常相似。有三个不同的表的问题是,我希望教师和学生共享一些功能。例如,教师应该能够像学生一样进行测验(为了测试目的)。我的第一反应是做一个学生和老师都扩展的用户类:

代码语言:javascript
复制
 public class User{
...
}
@Entity
@Table(name="student")
public class Student extends User{
...
}
@Entity
@Table(name="teacher")
public class Teacher extends User{
...
}

这种方法完成了我想做的小测验服务:

代码语言:javascript
复制
public QuizInstance takeQuiz(User u, QuizStructure struct){
...
}

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

代码语言:javascript
复制
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;
}

我怀疑这是否解决问题的最佳办法。我不禁想到,我的DB Schema的设计是一个问题,安全性和结构方面的问题。有人能告诉我,我构建的DB体系结构是否做工差,如果是的话,可以分享一些示例/资源,以便更好地说明DBs的更安全的体系结构。

EN

回答 1

Stack Overflow用户

发布于 2019-10-15 09:22:39

以下是一些建议,

  • 这个场景需要一个基本的RBAC (基于角色的访问控制)。
  • 所有的用户,即学生、教师、管理员等,本质上都是系统的用户,他们都需要登录。因此,您需要一个定义一组角色的表,即管理、教师、学生等。
  • 为所有用户提供
  • ,一个用户表就足够了。该用户表将具有作为属性的角色。
  • 用于安全性,即检查用户是否允许访问给定资源或执行操作,可以通过检查其角色来完成。例如,管理员将有权访问教师和学生不能访问的某些页面/操作。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58387386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档