powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
17 сообщений из 17, страница 1 из 1
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224780
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.

Есть такой пример в сети: http://javastudy.ru/gwt/gwt-hibernate-5/
Сделал всё как там - работает!

Проблема в другом, не могу понять, ЧТО нужно дописать в классе Main, чтобы заработала запись в базу??? (Чтение работает)
Я пробовал так:

Main
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
       /*init rpc service */
        final MainRpcServiceAsync rpcService = GWT.create(MainRpcService.class);
        button.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                rpcService.saveWeatherEntity(new WeatherEntity(), new AsyncCallback<WeatherEntity>() {
                    @Override
                    public void onFailure(Throwable caught) {
                        Window.alert("Failure: " + caught.getMessage());
                    }

                    @Override
                    public void onSuccess(WeatherEntity result) {
                        result.setCity("Сарапулка");
                        result.setDate("11/11/2002");
                        result.setPrcp(1110);
                        result.setTempLo(12);
                        result.setTempHi(13);
                    }
                });

            }
        });



В onSuccess(WeatherEntity result) Типа передал в result данные в

MainRpcServiceImpl
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
 @Override
    public WeatherEntity saveWeatherEntity(WeatherEntity weatherEntity) {

        System.out.println("Записываю....." + weatherEntity.getCity());

        session.beginTransaction();
        session.save(weatherEntity);
        session.close();
        return null;



Но тут уже getCity() содержит почему то null, а не то что я передавал в Main-е

Подскажите, что не так???
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224794
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может session.commit() надо.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224803
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

В результате опытов я понял, что дело не в сохранении данных, а в передаче!!!
т.е. в метод

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Override
    public WeatherEntity saveWeatherEntity(WeatherEntity weatherEntity) {

        System.out.println("Записываю....." + weatherEntity.getCity());

        session.beginTransaction();
        session.save(weatherEntity);
        session.getTransaction().commit();
        session.close();
        return null;

    }



weatherEntity приходит null -евым :(
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224835
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот если сделать так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Override
    public WeatherEntity saveWeatherEntity(WeatherEntity weatherEntity) {

        WeatherEntity we = new WeatherEntity();

        System.out.println("Записываю.....");
        
        session.beginTransaction();
        we.setCity("Бухарест");
        session.save(we);
        session.getTransaction().commit();
        session.close();
        return null;

    }



То записывается нормально. Но зачем мне это? Интереснее экземпляр WeatherEntity передавать как параметр через метод saveWeatherEntity
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224874
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это ничем не интереснее. как только вы добавите many to one, вы не сможете скомпилять класс для gwt.


между слоями надо кидаться dto, а не entity.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224875
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В GWT-шной части надо копать ИМХО
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39224927
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Penkov Vladimirмежду слоями надо кидаться dto, а не entity.
Может кинете примерчиком? :) В разрезе моей проблемы.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225033
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я если честно не особо различаю dto, entity, pojo.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225038
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Странно получается: вроде ЧТЕНИЕ между слоями реализовано верно. Т.е. на сервере из базы прочитал -> на клиенте выдал в TextBox(ы). А наоборот никак. Ну ведь зачем то реализован метод записи через Save ??? Подозреваю, что я где то нахимичил с описанием входных параметров на сервере и клиенте.

Сделал маячок такой в обработчике в Main:

Код: java
1.
2.
3.
4.
5.
  @Override
                    public void onSuccess(WeatherEntity result) {
                        if (result == null) Window.alert("result = null");
                        else { Window.alert("result <> null"); }
                    }



и получается что из GWT-модуля вызова в result УЖЕ null, ещё ДО передачи на сервер.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225080
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется эта магия называется асинхронность и где-то ты ее не так сварил.
Вобщем по обрывкам кода сложно делать суждения.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225109
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Тогда по порядку

На клиенте:
Main.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
package ru.javastudy.gwtPersistence.client;

public class Main implements EntryPoint {
    public void onModuleLoad() {

        final TextBox tbCity = new TextBox();
        final Button button = new Button("Send");

        /*init rpc service */
        final MainRpcServiceAsync rpcService = GWT.create(MainRpcService.class);

        /* --------------------------------------------------------------------------------------------------------- */
        rpcService.getAllWeatherEntity(new AsyncCallback<List<WeatherEntity>>() {
            @Override
            public void onFailure(Throwable caught) {
                Window.alert("Fail getAllWeatherEntity"); }
            @Override
            public void onSuccess(List<WeatherEntity> result){
                final WeatherEntity weatherEntity = result.get(3);
                tbCity.setText(weatherEntity.getCity());
            }
        });


        /* --------------------------------------------------------------------------------------------------------- */
        button.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {

                rpcService.saveWeatherEntity(new WeatherEntity(), new AsyncCallback<WeatherEntity>() {
                    @Override
                    public void onFailure(Throwable caught) {
                        Window.alert("Failure: " + caught.getMessage());
                    }
                    @Override
                    public void onSuccess(WeatherEntity result) {
                        //if (result == null) Window.alert("result = null");
                        //else { Window.alert("result <> null"); }
                    }
                });
            }
        });

        /*add view to Main.html without data*/
        RootPanel.get("slot1").add(tbCity);
        RootPanel.get("slot2").add(button);

    }
}




MainRpcService
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package ru.javastudy.gwtPersistence.client;

import ... ;

@RemoteServiceRelativePath("gwtPersistService")
public interface MainRpcService extends RemoteService {
    List<WeatherEntity> getAllWeatherEntity();
    WeatherEntity saveWeatherEntity(WeatherEntity weatherEntity);
}



MainRpcServiceAsync
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
package ru.javastudy.gwtPersistence.client;

import ...;

public interface MainRpcServiceAsync {
    void getAllWeatherEntity(AsyncCallback<List<WeatherEntity>> async);
    void saveWeatherEntity(WeatherEntity weatherEntity, AsyncCallback<WeatherEntity> async);
}



На сервере:

MainRpcServiceImpl

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
package ru.javastudy.gwtPersistence.server;

import...

public class MainRpcServiceImpl extends RemoteServiceServlet implements MainRpcService {

    private SessionFactory sessionFactory;
    private Session session;
    private List weatherEntityList = new ArrayList<>();

    public MainRpcServiceImpl() {
        sessionFactory = HibernateUtil.getSessionFactory();
        session = sessionFactory.openSession();
    }

    @Override
    public List<WeatherEntity> getAllWeatherEntity() {
        Query query =  session.createQuery("from WeatherEntity");
        weatherEntityList = query.list();
        return weatherEntityList;
    }

    @Override
    public WeatherEntity saveWeatherEntity(WeatherEntity weatherEntity) {
        session.beginTransaction();
        session.save(weatherEntity); //Здесь weatherEntity уже null. Как будто бы он и не передавался вовсе ((
        session.getTransaction().commit();
        session.close();
        return null;
    }
}



HibernateUtil
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
package ru.javastudy.gwtPersistence.server;

...

public class HibernateUtil {

    private static SessionFactory sessionFactory = buildSessionFactory();

    protected static SessionFactory buildSessionFactory() {
        // A SessionFactory is set up once for an application!
        final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
                .configure() // configures settings from hibernate.cfg.xml
                .build();
        try {
            sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
        }
        catch (Exception e) {
            // The registry would be destroyed by the SessionFactory, but we had trouble building the SessionFactory
            // so destroy it manually.
            StandardServiceRegistryBuilder.destroy( registry );
        }
        return sessionFactory;
    }


    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}



Ну и сущность WeatherEntity
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
package ru.javastudy.gwtPersistence.shared;
...

@Entity
@Table(name = "weather", schema = "public", catalog = "myDB")
public class WeatherEntity implements Serializable {
    private int id;
    private String city;

    @Id @GeneratedValue
    @Column(name = "id", nullable = false, insertable = true, updatable = true)
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    @Basic
    @Column(name = "city", nullable = true, length = 80)
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        WeatherEntity that = (WeatherEntity) o;
        if (city != null ? !city.equals(that.city) : that.city != null) return false;
        return true;
    }

    @Override
    public int hashCode() {
        int result = city != null ? city.hashCode() : 0;
        return result;
    }
}



Вобщем то всё. pom.xml и прочие конфиги наверное нет смысла постить?!
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225117
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULER, этот форум полон ленивых людей. И если ты сделаешь zip
архив с проектом то окажешь огромную услугу.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225123
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Не вопрос :)
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225152
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот читаю тут уже сколько топиков про эту прокладку хибер....
столько проблем..... в то время как без неё всё решается намного проще и быстрее и в разы меньшим кодом.
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225171
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,

Задание у меня такое... Хибер-ское ))
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225177
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAULERвадя,

Задание у меня такое... Хибер-ское ))сочувствую....
...
Рейтинг: 0 / 0
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
    #39225240
MAULER
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Народ,

Нашел свою ошибку!
Скорее, это моё непонимание некоторых вещей.

Ларчик просто открывался. Не надо было ничего "химичить". Всё просто:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
        final WeatherEntity weatherEntity = new WeatherEntity();

        /*init rpc service */
        final MainRpcServiceAsync rpcService = GWT.create(MainRpcService.class);

        button.addClickHandler(new ClickHandler() {
             @Override
             public void onClick(ClickEvent event) {

                 //Запись в экземпляр класса производится ДО метода обработки событий записи. Всё.
                 weatherEntity.setCity("Астана");
                 weatherEntity.setTempLo(1);
                 weatherEntity.setTempHi(15);
                 weatherEntity.setPrcp(3333);
                 weatherEntity.setDate("11/05/2006");

                 rpcService.saveWeatherEntity(weatherEntity, new AsyncCallback<WeatherEntity>() {
                     @Override
                     public void onFailure(Throwable caught) {
                         Window.alert("Failure: " + caught.getMessage());
                     }
                     @Override
                     public void onSuccess(WeatherEntity result) {
                         //Здесь ничего не надо. Событие записи УЖЕ СЛУЧИЛОСЬ!
                     }
                 });
             }
        });
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]