HibernateUtil与JPA

时间:2011-04-07 16:05:50

标签: java hibernate gwt jpa gilead

我无法弄清楚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();
        }
      }
    }

请见post (Gilead JPA configuration)。我还不明白,如何使用HibernateUtil,HibernateJpaUtil或PersistentBeanManager的东西......

2 个答案:

答案 0 :(得分:2)

您的实施已经足够了。我会将工厂放在servlet上下文中,而不是将其设置为静态。

但请注意这里的重要事项。如果您纯粹在服务器端使用它,上述代码将起作用。

由于您正在使用GWT,因此在客户端使用hibernate“stuff”是可能的(尽管我认为不合理)。为此你需要吉利德,你需要前面提到的实用工具。

答案 1 :(得分:2)

要将Gilead与GWT一起使用,首先要从

更改GWT-RPC服务实现
public class MyServiceImpl extends RemoteServiceServlet implements MyService {
    ....
}

成:

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

然后,在这些类的构造函数中,调用方法setBeanManager(beanManager)。按我在other answer中的描述执行设置。以下是整个代码段供参考:

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然后自动使用bean管理器(和HibernateJpaUtils),您不必直接与它进行交互。您所要做的就是确保您的实体扩展net.sf.gilead.pojo.gwt.LightEntity