使用Hibernate删除SQL表中的数据

时间:2012-09-19 09:45:42

标签: java

我想从mysql表中删除当前日期的数据。

这是我编写的代码,并在“ERROR”行显示异常:

从应用了where条件的表中删除数据的步骤是什么?

                    Date date=new Date();

                     SimpleDateFormat myFormat=new SimpleDateFormat("dd-MM-yyyy");

                     String todayDate=myFormat.format(date);

                    String query="delete * from today_list where today_date="+"'"+todayDate+"'";    
        Transaction t1=session.beginTransaction();  
        session.createQuery(query).executeUpate();//ERROR
                    t1.commit();

4 个答案:

答案 0 :(得分:4)

不要将实际参数值连接到查询字符串中。请改用setParameter

Query query = session.createQuery("delete from todayList where todayDate = :date ");
query.setParameter("date", date);
query.executeUpate();

这很容易理解,但下次也请发布错误消息。

编辑还请注意查询字符串中的表名。它不是数据库中的实际表名,而是Hibernate实体名。

答案 1 :(得分:3)

根据SQL语法,您不应在*后写delete,即将语句更改为

delete from ...

虽然在处理包括Hibernate在内的任何ORM时都不是正确的方法。这种方式绕过缓存(如果你有缓存)。更好的方法是使用会话API方法删除实体。

答案 2 :(得分:0)

它们是两件可以抛出异常的东西:

1 - 您应该在没有“*”的情况下写“删除”

2 - 尝试找出你需要的数据格式,如果你输错了格式,也可以抛出。

答案 3 :(得分:0)

首先,您的代码中存在拼写错误。它必须成为session.createQuery(query).executeUpdate(); 而不是;

session.createQuery(query)..executeUpate();

使用此会话事务,您可以删除数据库中的数据:

Configuration cfg = new Configuration();
                cfg.configure("Hibernate.cfg.xml");
                SessionFactory ss = cfg.buildSessionFactory();
                Session s = ss.openSession();
                Transaction tx = s.beginTransaction();
                Query query = s.createQuery("delete from Employee where Id:Id");
                query.setParameter("Id", valueToDelete);
                query.executeUpdate();
                tx.commit();
                s.close();

这对我来说非常有用!! :)