hibernate 方法问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:52:50
最近学习hibernate有如下问题:
Hiberante的session工厂提供了很好的数据底层操作!但有个问题,如:我要删除一条记录,但我在WEB是只有这个记录的ID,也就是说我为了删除记录还要得到它的对象!也就是说先session.get(ID),得到查询出来的对象,再session.delete(查询出来的对象)!就删除了!效率很底也很麻烦!但是这样操作是能够关联的!也就是说其它表和这条记录有关的Hibernate能帮你也删除了!
我用了一种方法就是:
要想删除一条记录,我只传它一个ID号,就让它删了,但要用到Query对象,再调用它的setString(0,id)给他ID赋值,也就是用HQL,但这样是不用session.get(ID),就能直接删除了,但问题又来了,Hibernate不会把它相关联的记录给删除!所以我就在另一个表上设置了一个外键!当我这个主表删除的时候,另一个表也自动删除,这个和上边达到了相同的目的!但这个功能是数据库帮你删除的!

还有一就是如:在查询的时候,是用HQL查询呢(传一ID值),还是用Hibernate的get(XX.class,id)方法呢,有什么不同么?开发中常用哪个?

还有那个工厂是用Spring

我想问题的是,你们在正常开发中,是用Hibernate那种功能呢,还是加入自己的想法呢,像我这样加入了外键,但没用到Hibernate关联的目的!如上边我说的这种效率有点低的Hibernate方法对开发影响大么?同时也请高手们给个SSH方面的建议!多谢了!
请你们不要答非所问好不好!难道我不知道这些关系么?看看我的问题!

在 opjo的配置文件中有个属性可以设置. 也就是级联更新.

cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,一对一的时候直接写在标签上,其他的要写在set标签上

cascade="none|save-update|all|all-delete-orphan"

none 就是不使用级联操作,默认级联是none。

save-update 也就是只有对象保存操作(持久化操作)或者是持久化对象的更新操作,才会级联操作关联对象(子对象)。

all 对持久化对象的所有操作都会级联操作关联对象(子对象)。

all-delete-orphan,在多端进行删除操作时,会再多端表中留下null空纪录,设置了级联操作为delete之会将表中表示关联的外键id置成null,不会将这条纪录也删除掉,而把级联设置成delete-orphan就不会留有空纪录,而是级联的把相关纪录删除掉。
试试..

不知道,学习中!

既然这样,hibernate支持用sql的!你就直接用sql吧!呵呵!

我感觉完全可以跳开那些限制,也不用用spring做代理,自己做一个简单的够用就行了,应该了解持久化对象的状态吧,利用这个关系配合修改pojo类配置文件做一个适合自己项目的缓存机制的代理类,万能的方法不一定适合你的项目。