hibernate继承映射

   起初项目把用户表根据具体职能分为了多个表,设计了一个模块后发现统一继承到系统登录时需要设置一个角色选项,根据角色再去不同的用户表里面查询登录,遂发现这样做太为繁琐了,不设置角色选择就需要提供不同的角色的登录接口页面,思考下还是为各个用户类抽象出一个父类对象。

   根据Hibernate的三种继承关系,考虑到减小修改代码量,决定用下面的第3种方式去实现。

1,一个继承结构一张表,通过鉴别器区分记录属于哪个子类

2,基类一张表,每个子类一张表,基类存放公共属性,子类存放扩展属性

3,基类无表,每个子类一张表,存放所有属性

  抽象出来的父类没有表,所有具体用户表都有父类的公共字段,在每个具体用户表类的hibernate的配置文件添加了父类的公共属性,子类的id会继承父类的ID,想到每个具体类都有自己的主键ID,将父类的ID字段映射为UUID,具体类的主键字段为ID,

虽然这样能够进行HQL多态查询,但是无法在父类中抽象出具体类的获取主键的方法,思考下决定修改父类的实体对象,新增如下方法,这样具体的角色类就可以获取对应的主键ID了。

public String getSubclassID(){
        String id="-1";
        if(this instanceof BaseUser){
            id=((BaseUser)this).getId();
        }else if(this instanceof MemberInfo){
            id=((MemberInfo)this).getId().toString();
        }else if(this instanceof BusinessInfo){
            id=((BusinessInfo)this).getId().toString();
        }else if(this instanceof BusinessReceptionist){
            id=((BusinessReceptionist)this).getId().toString();
        }
        return id;
    }


虽然增加了抽象的父类,但是用户和角色的对应仍需要去具体的用户表查询登录,角色字段可以也抽象到父类中,这样就可以直接用户名,密码登录就知道对应的角色,前提是多个用户表的用户名必须唯一不重复,这样HQL多态查询才能查出唯一的登录用户。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。