始终没有理解Hibernate精髓,请指教!

03-08-26 yadan
想来Hibernate的精髓是他作的对象之间的映射吧。但我在使用中并没有理解这些映射带来的好处,

举个例子:一个组织Org下包含多个用户User。我做了从Org到User的Set映射,还有User到Org的一到多的映射。

现在要创建一个用户,在界面上有一个select控件是显示所有组织的,其value值是org的Id。当用户选择了一个

组织注册时,createUser函数中先要通过org的Id找到Org对象,然后调用user.setOrg(Org org)函数。

但是, 如果我不作映射的话,不需要通过org的Id找到Org对象,只需要调用user.setOrgId(String)函数

把user对象的OrgId设置就可以了。如果需要查找User所属的Org,只需要得到orgId再通过Org的find方法。

我知道我这样理解肯定有偏差,但确实没有发现映射的好处。(或许跟我用mysql不用外键也有关?)请大家指点迷津,举一些实例,让我早日看到阳光:)

              

muziq
2003-08-27 10:11
很简单:

如果setOrg(),就是OOP

如果setOrgId(),就不是OOP

OO的目的不是为了让程序少几行代码,而是为了使设计更贴近需求,O/R mapping就是为了保证对象设计的纯粹性和与数据库实现的无关性,对象关系独立与外键的设置,程序员在编码时只需要考虑对象间的关系,不需要了解到底是通过那个外键来实现了这个关系

yadan
2003-08-27 11:06
你说的有道理,thks:)

但不知道这种情况你如何处理:

例如:构造一个论坛系统,Board代表一个版块,Board下有成百上千个主题Thread,Thread下包含N个Message。

那么Board类中需要加入所有Thread的Set或List么,Thread类中又是否包括所有的Message的集合?

如果在一个类中加入过多的集合映射,O/R mapping效率是否降低了?当然Hibernate可以设置lazy=true,

但是这个属性设置之后,GUI客户端又依赖于Hibernate包了。

总之我想问下:大家用Hibernate时常用集合映射吗?

banq
2003-08-27 11:37
集合映射用CMP的CMR不错。

xPetstore虽然介绍使用Hibernate,但是它的category和产品product关系就是使用CMP的CMR来完成的。

progame
2003-08-27 12:18
请问我可不可以把hibernate理解成为jdo的一个增强子集?

尽管它们使用的ql语法不同

猜你喜欢
4Go 1 2 3 4 下一页