呵呵EJB3持久化刚入门,有点头大。问题是这样的,我们这里搞了个权限模型,用户、组、对象、操作都是可以自定义的,也就是说某个用户或者组对于某个对象的某个操作具有允许和拒绝的权限,用户隶属于组,对于用户和组都可以分配权限,对象是树状结构,权限具有继承性,拒绝的优先级高于允许,如果按照传统关系型数据库的设计思路,至少得有下面几张表,简单起见,下面的介绍把组省略了用户表:
id - 用户ID,主键
name... - 其它信息对象表:
id - 对象ID,主键
code... - 其它信息操作表:
id - 操作ID,主键
descr... - 其它信息权限表
user_id - 用户ID,主键
target_id - 对象ID,主键
operation_id - 操作ID,主键
permission - 权限(accepted/denied)权限表中头三个是主键,分别和用户表、对象表、操作表中的主键外键关联。然后我就开始对照持久化中的几个模型开始绞尽脑汁了,就好像中学生解数学题套公式一样,结果发现没有合适的,如果把权限表中的三个主键做成复合主键,那么这个复合主键类中或许又要嵌入Embedded类型的数据了,好像很难看。后来从坛子里的一篇文章中得到启发,顺着面向对象的思路来设计,这样就把原来的权限表拆成了好几个一对多和一对一的关系:// 一个用户具有多个权限
class User {
    List<Permission> permissions;
}// 一条权限中包含一个对象、一个操作和一个允许/禁止规则
class Permission {
    Target target;
    Operation operation;
    String permission;
}// 对象
class Target {
    ...
}// 操作
class Operation {
    ...
}这样的思路和之间关系型数据库的思路完全不一样了,而且生成的数据库结构肯定也不一样,所以心中不免有些恐慌,会不会有什么问题,例如:怎样保证一个用户具有的多个权限不重复...呵呵刚入门,太多东西需要学习,请指教了。