Hibernate 执行HQL如何删除从表的数据

tcmis 2010-04-16 11:35:57
我现在想用HQL,根据主表PK删除从表数据,如何去做, 因为关联的关系,在从表就没有关联字段,而是一个主表的对象。。


主表:KrSysRole(对象)
// Fields
private String pk;
private String name;
private String createUser;
private Date createTime;
private String isntAvaile;
private String remark;
private String roleType;
private String rtName;
private String dontDel;
private Set krSysRoleHavemodules = new HashSet(0);




从表: KrSysRoleHavemodule
// Fields
private String pk;
private KrSysRole krSysRole; //主表对象
private String moduleId;
private String padd;
private String pdel;
private String pedit;
private String pprint;
private String pgrant;


用sql去删除语句:
delete from KR_SYS_ROLE_HAVEMODULE where role_id = ?;
就可以删除。。
HQL语句如何写。。谢谢
...全文
3846 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmis 2010-04-17
  • 打赏
  • 举报
回复
lxd520123

兄弟,,你的方法试了,不行,,配置文件里面也配置了,,直接用sql的写法吧。。。
tcmis 2010-04-16
  • 打赏
  • 举报
回复
我的从表结构,ROLE_ID外键,关联的主表的pk字段,楼上的兄弟,你这个从表的PK,和主表的PK,怎么去关联。。关联不上啊。。
 
SQL> desc KR_SYS_ROLE_HAVEMODULE
Name Type Nullable Default Comments
--------- ------------ -------- ------- --------
PK VARCHAR2(40) 主键
ROLE_ID VARCHAR2(40) Y 角色ID
MODULE_ID VARCHAR2(40) Y 模块ID
PADD VARCHAR2(4) Y 添加
PDEL VARCHAR2(4) Y 删除
PEDIT VARCHAR2(4) Y 修改
PPRINT VARCHAR2(4) Y 打印
PGRANT VARCHAR2(4) Y 授权
So_So 2010-04-16
  • 打赏
  • 举报
回复
hibernate 你配了 对应关系没? 配了的话
delete form KrSysRoleHavemodule where KrSysRoleHavemodule.pk=KrSysRole.pk
很久没用了 有点忘记了 估计是这样的
试试吧!
chenying0804 2010-04-16
  • 打赏
  • 举报
回复
都忘记了
情天小二 2010-04-16
  • 打赏
  • 举报
回复
其实,从主表级联删除从表记录这个问题,用纯HQL语句,我当时也没弄出来,但功能得实现吧?
所以,我就分两步走:
首先,删除从表;
然后,删除主表.
呵呵......

如有高人指点,在下不胜感激!!!!
情天小二 2010-04-16
  • 打赏
  • 举报
回复
补充一下,上边的WzInfo就是我的从表.改成你的 KrSysRoleHavemodule类就可以了.
主表删除就不用说了吧?
情天小二 2010-04-16
  • 打赏
  • 举报
回复
看看我的例子,希望对你有所帮助:我的思想就是先删除从表,然后再删除主表.

/**
* 删除从表记录(不影响主表)
* @param strings 存放从表记录的ID数组
*/
public void removeWzInfo(String[] strings) {
//删除用hql语句
String deleteHql = "delete from WzInfo w where w.wid = ?";
SessionFactory factory = this.getHibernateTemplate().getSessionFactory();
Session session = factory.openSession();
int count = 0;
//循环删除
for (String strId : strings) {
Query querydelete = session.createQuery(deleteHql);
querydelete.setInteger(0, Integer.parseInt(strId));
count += querydelete.executeUpdate();
}
//统计影响的条数
System.out.println(count);
session.close();
}
bunrise 2010-04-16
  • 打赏
  • 举报
回复
Query query= session.createQuery("delete from KrSysRoleHavemodule k where k.krSysRole.pk=:pk");
query.executeUpdate();


这样可以吗?
你需要在从表配置同主表关联<many-to-one>
So_So 2010-04-16
  • 打赏
  • 举报
回复
我的意思是 你关联哪个字段 where 条件语句 就用哪2个字段啊...我看你 2个PK 我就以为 是主外关系了..
如果再关联不上就有可能你的 映射关系没配 或者配错了

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧