hql语句中的delete语句执行成功,但数据中的数据却没有删除。

liufeng_2010 2010-04-06 07:33:50
代码如下:
public class PlanManagerDAOImpl implements PlanManagerDAO{

public boolean deletePlanItem(Long itemId) {
Session s = HbnUtil.getSession();
Transaction tran = s.beginTransaction();
boolean flag=false;
try {
String hql="delete from planItem where id="+itemId;
int number=s.createQuery(hql).executeUpdate();
if(number==1) return flag=true;
tran.commit();
} catch (Exception e) {
e.printStackTrace();
}finally{
s.close();
}
return flag;
}
//测试代码:
public static void main(String[] args){
PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl();
boolean al=pmdi.deletePlanItem(61L);
System.out.println("al===="+al);
}
}

执行结果:Hibernate: delete from S_PLAN_ITEM where ID=61
al====true
...全文
1370 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
liufeng_2010 2010-04-07
  • 打赏
  • 举报
回复
谢谢7楼兄弟啊,搞定了。
gao512008 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bearkin 的回复:]

Java code
public class PlanManagerDAOImpl implements PlanManagerDAO{

public boolean deletePlanItem(Long itemId) {
Session s = HbnUtil.getSession();
Transaction tran = s.beginTra……
[/Quote]正解
king_tm 2010-04-07
  • 打赏
  • 举报
回复
7楼正解!事务没有提交!
redlotus_lyn 2010-04-07
  • 打赏
  • 举报
回复
@Transactional
public boolean deletePlanItem(Long itemId) {
Session s = HbnUtil.getSession();
Transaction tran = s.beginTransaction();
boolean flag=false;
try {
String hql="delete from planItem where id="+itemId;
int number=s.createQuery(hql).executeUpdate();
tran.commit();
if(number==1){
return flag=true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
s.close();
}
return flag;
}
//测试代码:
public static void main(String[] args){
PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl();
boolean al=pmdi.deletePlanItem(61L);
System.out.println("al===="+al);
}
BearKin 2010-04-07
  • 打赏
  • 举报
回复
public class PlanManagerDAOImpl implements PlanManagerDAO{

public boolean deletePlanItem(Long itemId) {
Session s = HbnUtil.getSession();
Transaction tran = s.beginTransaction();
boolean flag=false;
try {
String hql="delete from planItem where id="+itemId;
int number=s.createQuery(hql).executeUpdate();
tran.commit();
if(number==1){
return flag=true;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
s.close();
}
return flag;
}
//测试代码:
public static void main(String[] args){
PlanManagerDAOImpl pmdi=new PlanManagerDAOImpl();
boolean al=pmdi.deletePlanItem(61L);
System.out.println("al===="+al);
}
}


你把return 放到了提交事务的前面 会更新就见鬼了
quanquanfly 2010-04-07
  • 打赏
  • 举报
回复
把delete from S_PLAN_ITEM where ID=61用数据库查询分析器试下,可能这句话根本就无法运行
舷Kelvin 2010-04-06
  • 打赏
  • 举报
回复
提交了吗关闭了吗刷新了吗
qingyuan18 2010-04-06
  • 打赏
  • 举报
回复
把hibernate里的sql调试选项打开,用console里输出的实际sql到数据库里实际执行,如果能成功删除,则问题出在程序中,否则在数据库层面

如果在程序中,考虑事务是否成功提交?关闭session是否可以完成delete操作
liufeng_2010 2010-04-06
  • 打赏
  • 举报
回复
1#的兄弟,你那个我试过了。效果一样。 还是执行了,数据库并没有删除。
wad12302 2010-04-06
  • 打赏
  • 举报
回复
如果单单是 Hibernate 那么 这个你在查找看看。

PreparedStatement //这个我是直接插jdk api的
int executeUpdate()
(1) SQL 数据操作语言 (DML) 语句的行数 (2) 对于无返回内容的 SQL 语句,返回 0

if(number==1) {
return flag=true;//如果删除成功 你就返回了 下面怎么commit
}
tran.commit();

我不建议用 if的 简写


if(number==1) return flag=true;
tran.commit();



看看 你的语句 会不会出问题
BigBird2012 2010-04-06
  • 打赏
  • 举报
回复
"delete from planItem where id="+itemId
楼主可以将hql语句换个格式试试:
" delete from planItem where id= ? "或
" delete from planItem where id= :itemId ",
然后用query的setParameter或者setLong给参数赋值试试。
有时字符串拼接会出问题........

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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