难道Hibernate中没有专门的查询主键语句?

03-09-01 banq
不要告诉我需要写HQL,

我需要象CMP那样,findByPrimaryKey一句搞定,好的O/R产品或CMP都是尽量减少SQL语句的编写。

neuhawk
2003-09-01 21:35
没有吧。

robbin
2003-09-01 22:08
你连这个都不知道???

session.load(Class, id)

yehs220
2003-09-02 08:39
Session.load()有很多缺点。
最新的cvs上有Session.get(clazz, id)

banq
2003-09-02 09:19
Session.load()太不明显了,我也估计它可能有点问题,所以显得比较羞涩,因为主键查询属于四大主要数据库操作之一查询的主要力量,Hibernate文档那么全,不应该不在显目位置标识。

而且Session.load不只是适合主键,其它都可以,那么它是不是没有针对主键查询进行优化?最经常使用的技术都是应该实现优化的,这是底层产品的标准做法。

相信Hibernate也比较在完善之中。

CMP在插入数据库后,会自动返回实体Bean Object,如下:
SubscriptionLocal subscriptionLocal = shome.create(subscription.getTitle(),
subscription.getType());

这样我可以再对subscriptionLocal实行操作,换成Hibernate就分两条语句,不是很习惯,希望一个O/R产品能够在CMP基础上发展。



robbin
2003-09-02 12:54
你错了,如果说到插入数据:

CMP这种操作方式,看似一条语句解决问题,实则需要向数据库发送两条sql,第一条是insert,第二条是select。

而Hibernate的操作方式你显然还没有搞清楚。Hibernate只向数据库发送一条sql。

在你上面的代码片断中,对象subscription是不需要再从Session中取出来的,已经创建好了,就可以直接用了。

sesssion.save(subscription);
就可以了,插入完毕。你不需要再load的了,直接用subscription。

感觉你的思路还是用CMP往Hibernate上面套。