码迷,mamicode.com
首页 > Web开发 > 详细

hibernate继承映射

时间:2014-11-04 22:54:47      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   os   java   sp   strong   文件   on   

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

   根据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多态查询才能查出唯一的登录用户。


hibernate继承映射

标签:style   io   ar   os   java   sp   strong   文件   on   

原文地址:http://my.oschina.net/tuzibuluo/blog/340815

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!