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


Автор: WhiteDream 30.3.2006, 20:57
Имеется проект в Netbeans работающий с hibernate. Создается table "honey" в базе данных Mysql (база данных создана заранее).
"firsthibernate". Вот код honey.java и TestExample (InitSessionFactory.java не привожу):
Код
//honey.java
package de.laliluna.example;
public class Honey {
    private Integer id;
    private String name;
    private String taste;
    public Honey() {}
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTaste() {
        return taste;
    }
    public void setTaste(String taste) {
        this.taste = taste;
    }
    @Override
    public String toString() {
        return "Honey: "+getId()+" Name: "+getName()+" Taste: "+getTaste();
    }
}

Код
//TestExample.java
package de.laliluna.example;
import java.util.Iterator;
import java.util.List;
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 static void main(String[] args) {
        Honey forestHoney = new Honey();
        forestHoney.setName("forest honey");
        forestHoney.setTaste("very sweet");
        Honey countryHoney = new Honey();
        countryHoney.setName("country honey");
        countryHoney.setTaste("tasty");
        createHoney(forestHoney);
        createHoney(countryHoney);
        // our instances have a primary key now:
        log.debug(forestHoney);
        log.debug(countryHoney);
        listHoney();
        deleteHoney(forestHoney);
        listHoney();
    }
    private static void listHoney() {
        Transaction tx = null;
        Session session = InitSessionFactory.getInstance().getCurrentSession();
        try {
            tx = session.beginTransaction();
            List honeys = session.createQuery("select h from Honey as h")
                    .list();
            for (Iterator iter = honeys.iterator(); iter.hasNext();) {
                Honey element = (Honey) iter.next();
                log.debug(element);
            }
            tx.commit();
        } catch (HibernateException e) {
            e.printStackTrace();
            if (tx != null && tx.isActive())
                tx.rollback();
        }
    }
    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();
        }
    }
}

Пример не мой, взят из нета. Он запускается и работает нормально. Теперь мне надо сделать сервлет, который выводил бы соответствующие строки таблицы honey (как делать простые сервлеты я знаю). Заранее спасибо.

Автор: powerOn 30.3.2006, 21:20
Цитата

Имеется проект в Netbeans работающий с hibernate. Создается table "honey" в базе данных Mysql (база данных создана заранее).
"firsthibernate". Вот код honey.java и TestExample (InitSessionFactory.java не привожу):


Цитата

Пример не мой, взят из нета. Он запускается и работает нормально. Теперь мне надо сделать
сервлет, который выводил бы соответствующие строки таблицы honey (как делать простые
сервлеты я знаю). Заранее спасибо



Признаюсь, лично мне не понятно в чем состоит вопрос.... smile

Автор: Goliath 31.3.2006, 03:39
Я насколько понял WhiteDream интересует, как производить выборку из базы. Если да тогда привету кусок кода
Код

public class FindByName 
{

    public static void main(String[] args) throws Exception 
    {
           // что ищем?
           String name = “Leha” ;

            // инициализация
            Configuration cfg = new Configuration().addClass(User.class);

            SessionFactory sf = cfg.buildSessionFactory();

             // открываем Session
              Session sess = sf.openSession();

             // поиск, результат в list
             List list = sess.find(query, name, Hibernate.STRING);

             if (list.size() == 0) 
            {
                    System.out.println("Not found ");
                    System.exit(0);
            }
            User u = (User) list.get(0);
            sess.close();
            System.out.println("Found " + u);
    }
}

Автор: tux 31.3.2006, 03:55
Цитата(Goliath @ 31.3.2006, 08:39 Найти цитируемый пост)
Я насколько понял WhiteDream интересует, как производить выборку из базы.

Вот как раз выборка из базы там есть - метод listHoney(). Осталось только вернуть полученный список сервлету.

2WhiteDream
В самом деле, пиши понятнее чего хочешь. Вроде как класс, который все делает с Honey, есть, сервлеты писать умеешь. Что еще нужно не понятно.

Автор: WhiteDream 31.3.2006, 18:56
с методом list действительно просто, а вот как с сервлетом быть? не очень ясно как без main обходиться

Автор: Goliath 31.3.2006, 19:24
В смысле. Просто делаешь практически тоже самое только в методе doGet или doPost.
Коль мы говорим про Hibernate, хотел спросить можно ли создавать/удалять таблицы?

Автор: tux 1.4.2006, 04:23
Цитата(Goliath @ 1.4.2006, 00:24 Найти цитируемый пост)
Коль мы говорим про Hibernate, хотел спросить можно ли создавать/удалять таблицы?

Просьба в следующий раз для каждого вопроса создавать отдельную тему.

Генерировать схему данных из маппингов и обновлять существующую схему можно используя утилиту SchemaExport - http://www.hibernate.org/hib_docs/v3/reference/en/html/toolsetguide.html#toolsetguide-s1. Только маппинги должны соответствовать определенным требованиям (они в статье описаны) и не со всеми драйвера JDBC тулса будет работать поскольку сильно зависит от метаинформации, предоставляемой драйвером. При этом не все драйверы соответствующее API в примелемом виде реализуют.

Еще. Заметь, что Hibernate не сможет создать индексы - у него нет такой информации, а они необходимы в production.

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