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

Есть такой пример в сети: 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
26.04.2016, 14:18
    #39224794
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Может session.commit() надо.
...
Рейтинг: 0 / 0
26.04.2016, 14:26
    #39224803
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
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
26.04.2016, 14:47
    #39224835
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Вот если сделать так:

Код: 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
26.04.2016, 15:13
    #39224874
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
это ничем не интереснее. как только вы добавите many to one, вы не сможете скомпилять класс для gwt.


между слоями надо кидаться dto, а не entity.
...
Рейтинг: 0 / 0
26.04.2016, 15:13
    #39224875
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
В GWT-шной части надо копать ИМХО
...
Рейтинг: 0 / 0
26.04.2016, 16:00
    #39224927
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Penkov Vladimirмежду слоями надо кидаться dto, а не entity.
Может кинете примерчиком? :) В разрезе моей проблемы.
...
Рейтинг: 0 / 0
26.04.2016, 18:21
    #39225033
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Я если честно не особо различаю dto, entity, pojo.
...
Рейтинг: 0 / 0
26.04.2016, 18:32
    #39225038
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
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
26.04.2016, 19:20
    #39225080
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
Мне кажется эта магия называется асинхронность и где-то ты ее не так сварил.
Вобщем по обрывкам кода сложно делать суждения.
...
Рейтинг: 0 / 0
26.04.2016, 20:03
    #39225109
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
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
26.04.2016, 20:15
    #39225117
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
MAULER, этот форум полон ленивых людей. И если ты сделаешь zip
архив с проектом то окажешь огромную услугу.
...
Рейтинг: 0 / 0
26.04.2016, 20:21
    #39225123
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
mayton,
Не вопрос :)
...
Рейтинг: 0 / 0
26.04.2016, 21:01
    #39225152
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
вот читаю тут уже сколько топиков про эту прокладку хибер....
столько проблем..... в то время как без неё всё решается намного проще и быстрее и в разы меньшим кодом.
...
Рейтинг: 0 / 0
26.04.2016, 21:28
    #39225171
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
GWT + Hibernate. Подскажите по примеру кода как правильно доделать?
вадя,

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

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

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

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

Код: 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
Форумы / Java [игнор отключен] [закрыт для гостей] / GWT + Hibernate. Подскажите по примеру кода как правильно доделать? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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