Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Проблемы с сервлетом


Автор: WhiteDream 1.4.2006, 18:22
По просьбе модератора, создаю новую тему на основе предыдущей (для нового вопроса - новая тема)
Я переделал в сервлет эту прогу и теперь TestExample.java выглядит следующим образом:
Код
package de.laliluna.example;

import java.util.Iterator;
import java.util.List;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import de.laliluna.hibernate.InitSessionFactory;

//public class TestExample {
public class TestExample extends HttpServlet {
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
       /*     Honey forestHoney = new Honey();
        forestHoney.setName("forest honey");
        forestHoney.setTaste("very sweet");
                Honey forest = new Honey();
                forest.setName("forest honey");
                forest.setTaste("very bad");
        Honey countryHoney = new Honey();
        countryHoney.setName("country honey");
        countryHoney.setTaste("tasty");
        createHoney(forestHoney);
        createHoney(countryHoney);
                createHoney(forest);  */
        
out.println("<html>" + "<head>" + "<title>Servlet MyHelly</title>");
        out.println("</head>" + "<body>");
               Transaction tx = null;
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        try{
            tx = session.beginTransaction();
                                List honeys = session.createQuery("from Honey as h WHERE name = 'forest honey'").list();
                                 for (Iterator iter = honeys.iterator(); iter.hasNext();) {
                Honey elem = (Honey) iter.next();

        out.println("Name = " + elem.getTaste()); 
        
            }
                        session.update(honeys);
                        tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            if (tx != null && tx.isActive())
                tx.rollback();

        }
        out.println("</body>" + "</html>");
        out.close();
                  
    }     protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    public String getServletInfo() {
        return "Short description";
    } 
            
    private static void deleteHoney(Honey honey) {
        Transaction tx = null;
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        try {
            tx = session.beginTransaction();
            session.delete(honey);
                        tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            if (tx != null && tx.isActive())
                tx.rollback();
        }
    }

    private static void createHoney(Honey honey) {
        Transaction tx = null;
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        try {
            tx = session.beginTransaction();
            session.save(honey);
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            if (tx != null && tx.isActive())
                tx.rollback();
        }
    }

}

Не произведение исскуств, но все же. smile Если я убираю /* */, то сервлет запускается и выдает:
Name = very sweet Name = very bad - что и требуется.
Если же снова поставить, то таблица в базе данных опустевает и сервлет ничего не выдает. Нужно чтобы сервлет ничего не создавал, а просто искал.

Автор: tux 3.4.2006, 02:51
Цитата(WhiteDream @ 1.4.2006, 23:22 Найти цитируемый пост)
По просьбе модератора, создаю новую тему на основе предыдущей (для нового вопроса - новая тема)

Замечание насчет новой темы вообще-то к Goliath относилось smile Новая так новая.

Подозреваю, что проблема вот в этой строке:
Код

session.update(honeys);

Ты пытаешься обновлять объект класса List, из-за чего вываливается исключение. Ну и, возможно, из-за этого не фиксируются изменения в базе данных. Попробуй эту строчку убрать, если не поможет, то весь проект с маппингами и настройками Hibernate в студию, будем разбираться дальше.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)