ORM 的原则是将一个类映射到一张表上,然而对象和关系型数据库之间有一点的差异。对象和对象之间的关系有一对一,一对多,多对多。这三个关系的关系的存储是有差异的。1、一对一:我们可以用两张表分别表示两个类。他们之间的关系我们可以用主关键字或者外关键字来表示。然而这里有一个粒度的问题(The problem of granularity )。关于粒度问题见第4点。2、一对多:我们也可以用两张表来表示两个类。他们的关系我们可以用外键来关联。3、多对多:我们可以用两张表来表示这两个类。用第三张表来表示他们之间的关系。4、关于问题的粒度: 如:一个用户和一个地址之间的关系。当然我们可以用一对一的方法来解决。然而这样是否合理?也许最好的方法是在数据库中增加一个新的数据类型Address(country state city zipcode etc.)。这样我们就很容易把这个粒度问题解决了。不幸的是,数据库是不允许自定义类型的(也许现在的数据库可以,鄙人不太清楚,呵呵)。Hibernate 对这个问题有了很好的解决。见以后的文章。5、对象之间可以有继承的关系,这是数据库望洋兴叹的。Hibernate 对这个问题有了很好的解决。见以后的文章。6、对象的身份识别问题。 大家都知道,java中的对象识别是用equals()和haseCode()来实现。 举例:
这样的类由于没有实现equals()和haseCode(),所以如果用下面的代码我们可以看到如下输出:
但是我们加上如下代码:
这就是java的对象识别。如果你将修改后的Message对象加入到java.util.Set中,不管你加多少,最后size()仍然为1。 那么hibernate中的对象识别如何呢?见以后文章。呵呵。
posted on 2007-02-10 14:44 满山红叶 阅读(628) 评论(0) 编辑 收藏 所属分类: Hibernate学习笔记
Powered by: BlogJava Copyright © 满山红叶