OJB和Hibernate是我用过两个O/R Mapping框架附带说一句我用OJB比Hibernate的时间长多了因此对Hibernate的了解不深因此有一些看法可能会有误
备注: OJB网址
OJB和Hibernate的机制基本上是样没有多的区别包括代理约束引用等 都可以使用类SQL语句OJB用OQLHibernate用HQL也可以设置查询类如
不过 我两者在一个很大的设计的区别
就是说数据填充上的设计
如
class User
{
private String name;
public void setName(String r_Name)
{
name=r_Name;
}
public String getName()
{
return name;
}
}
OJB用下列描述符
OJB的引擎将数据库填充到对象时是使用Reflection来设置name这个字段有些象username=
将对象中的数据保存到数据库时也是这样
Hiberate用下列描述符
Hibernate的引擎将数据库填充到对象时是使用Reflection来设置name这个属性即调用usersetName();
将对象中的数据保存到数据库时调用usergetName();
(我一向把Property看作带操作的field)
想来 设计者分别采用这种方式应该有各自的理由但我个人还是比较喜欢OJB的方式
原因如下
实体类应该只代表数据库通过field就可以使用Property进行访问只是避免以后可能的改动或者实体类不是单纯的实体类可以带些简单的业务模型意义里面因此用field可能会更好一些
比如说 用OJB的话类可能象这样getState返回String给用户查看如冻结帐户新注册用户
class User
{
private String name;
private int state;
public void setName(String r_Name)
{
name=r_Name;
}
public String getName()
{
return name;
}
public void setState(int r_State)
{
state=r_State;
}
public String getState()
{
if()
return ;
else
return
}
}
用Hibernate的类象这样
class User
{
private String name;
private int state;
public void setName(String r_Name)
{
name=r_Name;
}
public String getName()
{
return name;
}
public void setState(int r_State)
{
state=r_State;
}
public void getState()
{
return state;
}
public String getStateString()
{
if()
return ;
else
return
}
}
我总是觉得OJB的看起来更顺眼一些
当然我不是说Hibernate不好
不过在一般的中小型程序中很少有纯粹的实体类多多少少都带了一点业务或者因为其它原因如上面的原因OJB可能会有点优秀