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 = ? ”是错误的。
在用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()方法??
在数据库中做级联删除,或者先删子表,后删父表!
其实你完全可以不用复合主键,只要之间的关系对应好了,就相当于是设置了复合主键了
别名是肯定能加的,而且有联合主键的时候跟是需要别