Hibernate建模的一些疑问
目前正基于Hibernate来开发一些项目。
建模中,碰到一些问题,不知该如何解决,请教各位。
问题是这样的:假设我需要存储三个类,A,B,C,其中A是B和C的父类。
那么,按照Hibernate的建议,我应该在xml中定义A的存储,并将B,C作为A的subclass来声明。但是这样会遇到一些问题。比如B,C各自的属性中,有not-null的字段,比如B,C的各自属性中,有外键关联等等...。当然,可以用join-subclass来解决这两个问题,但我不清楚对hibernate,这两种方式有什么区别,为什么文档中推荐subclass而非join-subclass。
另外,两种方式都无法解决一个问题:假设A有一个属性name,name应该在B和C中各自为unique的,但是B和C的对象应该可以拥有相同的name。这个问题该如何建模?
我觉得将多个子类放在同一张表中会带来不少问题,所以目前我的方式是将B和C拆开。由于我的系统中,没有类型为A的对象,只有类型为B,C的对象。所以我在hbm.xml中,没有声明A,直接将B,C声明为顶级的class。把A的属性放到B,C中,将B,C彻底拆分为两个单独的表。这样能解决上述的问题。
但是这样做毕竟是一种比较不符合面向对象的方式,也并不好。
希望大家一起来讨论一下,在Hibernate中,如果需要实现比较复杂的类层次结构,该如何建模比较好,各种建模的方式有何优劣,特点是什么,有什么地方需要注意的。