2 finemi finemi 于 2015.06.10 23:34 提问

Hibernate中,继承映射还是使用"type"字段区分

个人觉得hibernate的继承映射是很好的东西,但是看了不少项目都是使用的一个type字段来区分类型,而我们老师也是这样做的。
从对象的设计来说,User和Admin可以是一类,使用继承映射恰恰合适。而使用type字段等,第一:不符合面向对象的思想,第二:字段冗余

但是,如果使用继承映射,我暂时想到的无法解决的问题包括:
对于角色转换,使用字段的方式可以通过改变这个字段来修改角色,比如User变为Admin,Admin变为User,这在一些权限管理的系统中肯定是会出现的。使用hibernate的继承映射的话,发现无法转换已经持久化的对象类型,如果通过先删再插入的方法,对于用的自动生成id的话,又无法主动指定id,所以不可行。

所以,如果使用hibernate的继承映射,我上面提到的两个问题:无法转换角色(类型)、自动生成列手动指定id 是否确实存在?
学生一个,所以实际开发经验还缺乏,所以不确定如果采用继承映射,是否还会有其他潜在的问题。 或者说,最好不实用继承映射,而是使用传统的type方式。

3个回答

u013370108
u013370108   2015.06.11 07:36
已采纳

1.你说的无法转换角色(类型),一般的项目中角色是由超级管理员分配的user就是user,admin就是admin,为什么要将它进行转换,你创建一个role的实体表和映射表。
2.如果是自动生成id,则无法手动制定ID,显示层会 报no result and imput,前些天我遇到过。

u013370108
u013370108 回复finemi: 超级管理员应该是在安装类中的,别人在导入项目后,运行安装类,就有了一个超级管理员,超级管理员不用判别权限,而是自动获取所有权限,超级管理员指定管理员的对应权限。最好是建user和role两张表,然后将他们多对多的关联起来。
2 年多之前 回复
finemi
finemi 角色的变更,权限的提升,比如普通用户提升权限变更为管理员,管理员提升为超级管理员。 所以从对象角度讲,我可以有User<——Admin<——SuperAdmin ,而不是通通都是User,然后User里面有个Role。这就是我的想法的出发点
2 年多之前 回复
francislpx
francislpx   2015.06.11 16:50

一般是这样:用户《---》角色《----》权限(资源);所以先是三张表user,role和privilege。然后是对应关系,用户角色对于表、角色权限对应表

frank_20080215
frank_20080215   2015.06.11 07:50

那是DB设计的原因:用户放在一个组中,组又分配已定义的角色。形成三方关系。很灵活的。
这是成熟的思路

francislpx
francislpx 回复finemi: 不要想着把所有的东西都用上
2 年多之前 回复
finemi
finemi 都不用继承映射吗? 难道hibernate的继承映射是个摆设。。。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片