hibernate删除记录的问题。

来源:百度知道 编辑:UC知道 时间:2024/06/12 20:15:13
例如我有一个HelloWorld的实体类,他有一个复合主键的Id类,两个主键A和B。
在用hql删除多行记录的时候就出现问题了。
delete from HelloWorld where id.A = ?
结果这个hql不能被执行。

如果我的类不另外使用Id类的话,就可以被执行。
例如delete from HelloWorld where A = ?

问题是,如何能让hibernate完成我上述第一个情况呢?
我是想要删除用了另外一个类作为主键的记录。我的问题是如何删除记录。

问题就是在delete from HelloWorld where id.A = ? 中,加入了“id.A”以后,hibernate把它转译成为"hellowo_0.ID",但是hibernate的语法在“delete from HelloWorld”中不允许加别名。也就是说“delete from HelloWorld hello where hello.id.A = ? ”是错误的。

delete from HelloWorld where id.A = ?
就这样看来,你的主键少了一个, 加上 and id.B=?
试试

既然主键是复合的。你怎么能单靠一个主键就能命中一条记录呢,再补上另一个主键试试

楼主你说这句可以
"例如delete from HelloWorld where A = ? "
?好像不能简单的是某类实例类型

什么意思?偶看不懂捏?
http://hi.baidu.com/eloveyaya/blog/item/7b2b3bd9ab45323333fa1cc0.html

这里有详细的解释 但你说的还是不明白 如果用语句删除的话 难道非那样不可以么

上面的地址是把复合主键单弄个实体 这样也许好弄吧

补充回答:

那么你直接用session里的delete的方法捏?有点墨迹哦...

还有..既然是delete语句 加from干什么 ...

这个...我貌似没加啊...delete TestEntity te where te.name = 'Tony'

hql语句很好用的- -...

还有Hibernate里Session哪个方法是执行更新语句?偶忘记了....

所谓的复合主键是指用2个主键联合起来作为唯一标识!
如果你用了复合主键,那么你的Hibernate实体类有没有重写hashCode()和equals()方法??
在数据库中做级联删除,或者先删子表,后删父表!

其实你完全可以不用复合主键,只要之间的关系对应好了,就相当于是设置了复合主键了

别名是肯定能加的,而且有联合主键的时候跟是需要别