Hibernate

di il
4 risposte

Hibernate

Salve sto facendo un esercizio per quanto riguarda l'applicazione web, e sto riscontrando dei problemi per quanto riguarda la modifica utilizzando il framework Hibernate.
Non so dove possa esserci questo problema. Ho il metodo di modifica in questo modo:

public void modificaProdotto(Prodotto p) {

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
String hql="update Prodotto SET nome= :nome WHERE id= :id";
Query query = session.createQuery(hql);
query.setParameter("nome", p.getNome());
//query.setParameter("id", p.getId());
//query.executeUpdate();
session.getTransaction().commit();
}

Nella mia Servlet poi tramite il metodo GET mi sono richiamato la funzione in questo modo:

int id = Integer.parseInt(request.getParameter("id"));
CRUD.getInstance().modificaProdotto(p);
List<Categoria> listacat = CRUD.getInstance().visualizzaCategoria();
HttpSession session = request.getSession();
session.setAttribute("listacat", listacat);

RequestDispatcher rd = request.getRequestDispatcher("modifica.jsp");
rd.forward(request, response);

Una volta che mi visualizza tutti i Prodotti associati alle Categorie gli ho passato l'id. Quell'id che vedete e perché mi sono fatto un link chiamando la servlet modifica.

nella mia jsp poi :

<form name="mascheraModifica" action="Modifica" method="POST">


Nome Prodotto <input type="text" name="nome" values="${prodotto.nome}">
<select name="categoria">
<c:forEach var="cat" items ="${listacat}"><tr>
<option value="${cat.id}">
${cat.categoria}</tr>
</option>

</c:forEach>

</select>

<input type="submit">

Tramite il metodo POST mi sono richiamato i parametri e le ho messe in una variabile in questo modo:


String nome = request.getParameter("nome");
int id = Integer.parseInt(request.getParameter("categoria"));


//Prodotto p = new Prodotto();
p.setNome("nome");
Categoria c = CRUD.getInstance().selectById(id);
p.setCategoria(c);
CRUD.getInstance().modifica(p);
response.sendRedirect("ins.html");

Questo e quello che ho fatto ma mi da errore quando clicco su submit della jsp. Please..

4 Risposte

  • Re: Hibernate

    Alex96 ha scritto:


    String hql="update Prodotto SET nome= :nome WHERE id= :id";
    Query query = session.createQuery(hql);
    query.setParameter("nome", p.getNome());
    //query.setParameter("id", p.getId());
    //query.executeUpdate();
    session.getTransaction().commit();
    Perché hai commentato quelle due righe del setParameter e executeUpdate?

    Alex96 ha scritto:


    int id = Integer.parseInt(request.getParameter("id"));
    CRUD.getInstance().modificaProdotto(p);
    List<Categoria> listacat = CRUD.getInstance().visualizzaCategoria();
    HttpSession session = request.getSession();
    session.setAttribute("listacat", listacat);
    E in tutto questo, dove (se) usi la variabile int id??

    Alex96 ha scritto:


    Questo e quello che ho fatto ma mi da errore quando clicco su submit della jsp. Please..
    Quale errore esattamente?
  • Re: Hibernate

    Ho commentato quelle due righe perché mi dava errore ho solo provato a commentarle per vedere se era quello ma no alla fine era giusto per vedere..

    quell'id me lo sono portato con me cosi :
    <td><a href="Modifica?id=${prodotto.id}"><button> Modifica </button></a></td>
    e sono andato nella pagina jsp che ti ho fatto vedere..

    ERRORE:
    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    tipo questo;
    ma anche altri come :
    Not all named parameters have been set: [id] [update Prodotto SET nome= :nome, categoria= :categoria WHERE id= :id]
  • Re: Hibernate

    Alex96 ha scritto:


    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
    L'unica cosa chiara è che l'update non ha modificato alcuna riga. Ci sono diversi motivi per questo. Ma non ho sufficiente visione su quello che hai fatto.

    Alex96 ha scritto:


    Not all named parameters have been set: [id] [update Prodotto SET nome= :nome, categoria= :categoria WHERE id= :id]
    Questo è abbastanza "banale" e lampante. Non hai settato il id.
  • Re: Hibernate

    Tramite quel link di modifica che ti ho fatto vedere vado nella servlet modifica e con il GET faccio questo:
    int id = Integer.parseInt(request.getParameter("id"));
    List<Categoria> listacat = CRUD.getInstance().visualizzaCategoria();
    CRUD.getInstance().modifica(p);
    HttpSession session = request.getSession();
    session.setAttribute("listacat", listacat);

    RequestDispatcher rd = request.getRequestDispatcher("modifica.jsp");
    rd.forward(request, response);
    poi faccio la jsp come ti ho fatto vedere e con il post faccio questo:

    String nome = request.getParameter("nome");
    int id = Integer.parseInt(request.getParameter("categoria"));


    //Prodotto p = new Prodotto();
    p.setNome(nome);
    Categoria c = CRUD.getInstance().selectById(id);
    p.setCategoria(c);
    CRUD.getInstance().inserimentoProdotto(p);
    response.sendRedirect("ins.html");


    Sempre come ti ho fatto vedere questa volta mettendo l'inserimento e mi da questo errore :

    object references an unsaved transient instance - save the transient instance before flushing: model.Categoria
Devi accedere o registrarti per scrivere nel forum
4 risposte