Hibernate no borrar mi fila:

public boolean deleteVote(Login user, int pid){

      Session session = getSession();

      try{
          String hql = "delete from Vote where uid= :uid AND pid= :pid";
          Query query = session.createQuery(hql);
          System.out.println(user.getUid() + " and pid: " + pid);
          query.setString("uid", user.getUid());
          query.setInteger("pid", pid);
          System.out.println(query.executeUpdate());
      }catch(Exception e){

Outprint:

uid: 123 and pid: 1
Hibernate: delete from votes where uid=? and pid=?
1

La Sintaxis de SQL es el trabajo, cuando estoy tratando directamente en SQL. Directo de Sintaxis SQL:

 delete from votes where uid= '123' AND pid= 1

De asignación:

<class name="package.model.Vote" table="votes">
   <id name="vid" column="vid" >
   <generator class="increment"/>
</id>
<property name="pid" column="pid" />
<property name="uid" column="uid" />
<property name="tid" column="tid" />
<property name="votes" column="votes" />
 </class>

Tabla:

CREATE TABLE IF NOT EXISTS `votes` (
  `vid` int(11) NOT NULL 
  `pid` int(11) NOT NULL,
  `uid` varchar(20) NOT NULL,
  `tid` int(11) NOT NULL,
  `votes` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`vid`),
  KEY `pcid` (`pid`,`uid`),
  KEY `uid` (`uid`),
  KEY `tid` (`tid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ;

ALTER TABLE `votes`
ADD CONSTRAINT `votes_ibfk_3` FOREIGN KEY (`pid`) REFERENCES `poll` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `votes_ibfk_4` FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON DELETE CASCADE ON     UPDATE CASCADE,
ADD CONSTRAINT `votes_ibfk_5` FOREIGN KEY (`tid`) REFERENCES `teams` (`tid`) ON DELETE CASCADE ON UPDATE CASCADE;

INSERT INTO `votes` (`vid`, `pid`, `uid`, `tid`, `votes`) VALUES
(20, 1, '123', 1, 1);

Supongo que es algo bastante fácil porque todo se ve bien para mí hasta ahora. No tuve ningún error ni nada, simplemente que no elimine está sucediendo.

Cualquier ayuda es muy apreciada.

¿Cómo sabes que no se elimina? ¿Comprueba en la base de datos o lo hiciste otra consulta en la aplicación?
comprueba directa en la base de datos
Hace un inserte el trabajo para su? ¿Tienes transacciones configurado en algún lugar?
inserte está trabajando. Yo no tengo ninguna de las transacciones en el método. Qué necesito? //EDIT: Publicado el método completo para obtener más claro
Creo que hay remolcar cosas que usted puede intentar. Uno de ellos es el cambio de la capital de la carta de Votar en la consulta a minúsculas (si está trabajando con una clave de sistema sensible puede ser el problema). Y otra cosa que puedes intentar es hacer una consulta en la aplicación y comprobar si el problema son las transacciones.

OriginalEl autor user1671980 | 2012-11-21

3 Comentarios

  1. 32

    Usted necesita para empezar y la confirmación de una transacción.

    Transaction transaction = session.beginTransaction();
    try {
      //your code
      String hql = "delete from Vote where uid= :uid AND pid= :pid";
      Query query = session.createQuery(hql);
      System.out.println(user.getUid() + " and pid: " + pid);
      query.setString("uid", user.getUid());
      query.setInteger("pid", pid);
      System.out.println(query.executeUpdate());
      //your code end
    
      transaction.commit();
    } catch (Throwable t) {
      transaction.rollback();
      throw t;
    }

    También es posible que usted necesita para cerrar la sesión antes de que los cambios serán visibles en la base de datos.

    OriginalEl autor Bantak

  2. 1

    De la Salida que proporciona

    uid: 123 and pid: 1
    Hibernate: delete from votes where uid=? and pid=?
    1

    está claro que query.executeUpdate() es volver 1. El método devuelve
    el número de entidades actualizado o eliminado. Esto significa que 1 fila ha sido actualizado o eliminado, lo cual está bien.

    Tratar de hacer un session.flush() a ras de la sesión, o un session.evict() para quitar el objeto de la sesión.

    OriginalEl autor Raul Rene

Dejar respuesta

Please enter your comment!
Please enter your name here