Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [JAVA and HIBERNATE] Cancellare riga da db

    Ciao ragazzi,

    preciso che sono alle prime esperienze con Hibernate. Dopo aver letto tanta documentazione ho provato a buttar giù un po di codice, ma non riesco a spiegarmi perchè riesco ad eseguire un'inserimento sulla tabella del mio DB ma proprio non riesco ad eseguire una cancellazione....

    Il DBMS in uso è MySQL 5.0 e la tabella del mio DB si chiama "Contact" e prevede i campi id (int), firstName (String), lastName (String) ed email (String).

    Nello specifico, la procedura che esegue correttamente l'inserimento in Contact è:

    codice:
    	public void insertContact(String firstName, String lastName, String email ) {
    
    		Session session = null;
    		Contact contact = new Contact();
    
    		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    		session = sessionFactory.openSession();
    
    		Transaction tx = session.beginTransaction();
    
    		System.out.println("Inserting Record");		
    		contact.setFirstName(firstName);
    		contact.setLastName(lastName);
    		contact.setEmail(email);
    		session.save(contact);	
    
    		tx.commit();
    		System.out.println("Done");
    
    		session.flush();
    		session.close();
    	}
    Mentre la procedura per cancellare una riga dalla tabella Contact:

    codice:
    	public void deleteContact(String id) {
    		Session session = null;
    		SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
    		session = sessionFactory.openSession();
    		
    		Transaction tx = session.beginTransaction();
    		
    		String hql = "delete Contact where id = 2";
    		Query query = session.createQuery(hql);
    		int row = query.executeUpate();	       
    
    		tx.commit();	
    		session.close();
    
    		if (row == 0){
    			System.out.println("Didn't deleted any row!");
    		}
    		else{
    			System.out.println("DeletedRow: " + row);
    		}
    	}

    Ebbene, come dicevo, mentre l'inserimento va tranquillamente a buon fine, quando provo ad eseguire una cancellazione il messaggio d'errore è:


    Hibernate: delete from CONTACT contact0_ where (id=2)
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not execute update query
    at org.hibernate.exception.ErrorCodeConverter.convert (ErrorCodeConverter.java:70)
    at org.hibernate.exception.JDBCExceptionHelper.conver t(JDBCExceptionHelper.java:43)
    at org.hibernate.hql.ast.UpdateStatementExecutor.exec ute(UpdateStatementExecutor.java:76)
    at org.hibernate.hql.ast.QueryTranslatorImpl.executeU pdate(QueryTranslatorImpl.java:294)
    at org.hibernate.impl.SessionImpl.executeUpdate(Sessi onImpl.java:808)
    at org.hibernate.impl.QueryImpl.executeUpate(QueryImp l.java:89)
    at prove.FirstExample.deleteContact(FirstExample.java :94)
    at prove.FirstExample.start(FirstExample.java:41)
    at prove.FirstExample.main(FirstExample.java:19)
    Caused by: java.sql.SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'contact0_ where (id=2)' at line 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.ja va:2851)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:15 34)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java :1625)
    at com.mysql.jdbc.Connection.execSQL(Connection.java: 2297)
    at com.mysql.jdbc.Connection.execSQL(Connection.java: 2226)
    at com.mysql.jdbc.PreparedStatement.executeInternal(P reparedStatement.java:1812)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1906)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1831)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(Pre paredStatement.java:1693)
    at org.hibernate.hql.ast.UpdateStatementExecutor.exec ute(UpdateStatementExecutor.java:67)
    ... 6 more

    Faccio notare che ho provato anche ad usare "delete from
    Contact contact where id = 2" al posto di "delete Contact where id = 2" ma in questo caso il risultato è addirittura una java.lang.NullPointerException....

    Mi sembra evidente che non sia un problema di connessione al DB o di configurazione visto che l'inserimento funziona.

    Ed è quasi superfluo dire che ho ampiamente ricercato la soluzione su google masenza venirne a capo....

    Qualcuno riesce a darmi suggerimenti...? Please help me

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    42
    Ciao,
    prova con questa:

    String hql = "delete Contact where id = ?";
    hql.setInt(1,2);

    Carmine

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.