日期:2014-05-19  浏览次数:20648 次

请问各位J2EE开发中HIBERNATE实体JAVA类的创建约束如何最好
本人刚开始从事软件项目开发,目前是J2EE方向的.一般也就是基本的J2EE后台管理系统.
对于数据库是采用了HIBERNATE的方案.
我现在想问一下最基本的一个设计原则,各位在HIBERNATE的实体JAVA类中是怎么设计的?
我第一个项目基本都是同事干的,应该是手写修改的,那个系统的JAVA实体类设计全部都是对应字段来进行的.
例如 表A,字段AID,ROOT..表B,字段ID,P,AID..
其中AID分别是表A,B的主键和外键.那么类B中定义AID则直接为Long AID这种形式

我第二个项目是我自己用工具middlegen生成的,如果同样是这样的情况,则B中的AID定义为Class A a;就是用对象来存储该字段.并且通过工具生成的HIBERNATE配置文件也是匹配这种形式的.

通过开发比较,第一种形式开发相对比较简单,第二种则麻烦一些.但是我觉得可能如果采用方案二可能会更通用一些,因为引用B的时候如果顺带能带上A还是能降低工作量的,尤其象搜索的时候有时候就是查B但是实际也需要A的信息.这时候,相对来说第一种方法就不是太灵活了.毕竟,代码自动生成工具的设计也应该考虑到了这点.相对缺点可能是系统开销会大,设计基础DAO操作之类会更复杂之类.关于同事加的DAO那层的基本操作我虽然不懂HIBERNATE函数的定义,不过走测试跟踪的时候可以查的到,操作B对象的时候,B里面所带的A并不是一个完整的对象,而是一个可能引用的A对象,只能带有一个AID的属性,但是实际上里面的A是一个NULL.所以觉得DAO的设计还是要更复杂一些,而不是单纯的把数据压进去.

请问,各位在公司项目开发的时候采用哪种实体类的设计方式?还有,谁有实例化B更好的方法,得到一个真正的B对象,而不是里面有一个伪A存在??

虽然问题简单,但希望高手解答下疑问啊..不单单是在编程上,重要的是方案的选择对项目的灵活性开销等方面的影响上.
1 楼 KayMO 2007-01-06  
前面的,简单的单表映射,其并没有用到太多hibernate.
后面的所涉及的是hibernate处理关系数据库关连关系的java side典型方法,middlegen的原理来源于hibernate,所以generate出来的就为那样,不过建议不要太过依赖机械式生成,并不是有association就一定会好.