HibernateUtil с JPA - PullRequest
       43

HibernateUtil с JPA

0 голосов
/ 07 апреля 2011

Я не могу понять, что такое HibernateUtil ... Требуется ли с JPA?

Я использую JPA с GWT, достаточно ли этой реализации?

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public final class EMF {
    private static final EntityManagerFactory emfInstance =
        Persistence.createEntityManagerFactory("default");

    private EMF() {}

    public static EntityManagerFactory get() {
        return emfInstance;
    }
}

А при использовании:

public class AccountDao {

  public static final EntityManager entityManager() {
    return Emf.get().createEntityManager();
  }



    public void createAccount(Account account) {

        EntityManager em = entityManager();
        EntityTransaction tx = em.getTransaction();

        try {
          tx.begin(); 
          em.persist(account);
          tx.commit();
        } 
        catch (Throwable t) {
          t.printStackTrace();
          tx.rollback();
        } 
        finally {
          em.close();
        }
      }
    }

См. Этот пост (конфигурация Gilead JPA) пожалуйста.Я пока не могу понять, как использовать HibernateUtil, HibernateJpaUtil или PersistentBeanManager, ...

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Чтобы использовать Gilead с GWT, сначала измените свои реализации службы GWT-RPC с

public class MyServiceImpl extends RemoteServiceServlet implements MyService {
    ....
}

на:

public class MyServiceImpl extends PersistentRemoteService implements MyService {
    ....
}

Затем в конструкторе этих классов вызовите методsetBeanManager(beanManager).Выполните настройку, как я описал в моем другом ответе .Вот полный фрагмент кода для справки:

public class MyServiceImpl extends PersistentRemoteService implements MyService {


  public MyServiceImpl() {

    EntityManagerFactory emf = EMF.get();

    HibernateJpaUtil hibernateJpaUtil = new HibernateJpaUtil();
    hibernateJpaUtil.setEntityManagerFactory(emf);

    PersistentBeanManager persistentBeanManager =
      GwtConfigurationHelper.initGwtStatelessBeanManager(hibernateJpaUtil);

    setBeanManager(persistentBeanManager);
  }

  // Service methods follow here

}

Этого достаточно для настройки - тогда Gilead автоматически использует менеджер компонентов (и HibernateJpaUtils) под обложками, вам не нужно напрямую с ним взаимодействовать.Все, что вам нужно сделать, это убедиться, что ваши сущности расширяются net.sf.gilead.pojo.gwt.LightEntity.

2 голосов
/ 07 апреля 2011

Ваша реализация вполне достаточна. Я бы поставил фабрику в контексте сервлета, а не делал ее статичной.

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

Поскольку вы используете GWT, возможно (хотя я не думаю, что это рационально) использовать hibernate "вещи" на стороне клиента. Для этого вам понадобится Gilead, где вам понадобятся вышеупомянутые утилиты.

...