我无法弄清楚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的东西......
答案 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
。