2011-04-07 2 views
0

Je ne peux pas comprendre ce qui est HibernateUtil ... Est-il nécessaire avec JPA? J'utilise JPA avec GWT, cette implémentation est-elle suffisante?HibernateUtil avec JPA

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; 
    } 
} 

Et à l'utilisation:

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(); 
     } 
     } 
    } 

Voir cette post (Gilead JPA configuration) s'il vous plaît. Je ne peux pas encore comprendre, comment utiliser HibernateUtil, ou HibernateJpaUtil, ou PersistentBeanManager trucs ...

+0

N'est-il pas préférable d'utiliser les DTO à la place? –

Répondre

2

Pour utiliser Gilead avec GWT, changez d'abord vos implémentations de service-RPC GWT de

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

dans:

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

Ensuite, dans le constructeur de ces classes, appelez la méthode setBeanManager(beanManager). Effectuez l'installation comme je l'ai décrit dans other answer. Voici l'ensemble du code de référence:

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 

} 

Ceci est suffisant pour l'installation - Gilead utilise le gestionnaire de haricots (et HibernateJpaUtils) automatiquement sous les couvertures, vous ne devez pas interagir directement avec elle. Tout ce que vous avez à faire est de vous assurer que vos entités s'étendent net.sf.gilead.pojo.gwt.LightEntity.

+0

Veuillez donner un exemple comment persister une entité –

+1

@kostas: La persistance d'une entité fonctionne comme d'habitude dans JPA. Voir http://docs.jboss.org/hibernate/core/3.6/quickstart/en-US/html/hibernate-gsg-tutorial-jpa.html. (Bien sûr, vous devrez le faire du côté du serveur: implémentez une méthode de service GWT-RPC, qui accepte une entité - ou plusieurs entités - du client, puis persiste comme expliqué.) –

2

Votre implémentation est assez suffisante. Je mettrais l'usine dans le contexte de servlet, plutôt que de le rendre statique cependant.

Mais notez une chose importante ici. Le code ci-dessus fonctionnera si vous l'utilisez uniquement côté serveur.

Puisque vous utilisez GWT, il est possible (bien que je ne pense pas que ce soit rationnel) d'utiliser hibernate "stuff" du côté client. Pour cela, vous auriez besoin de gilead, où vous aurez besoin des utilitaires mentionnés ci-dessus.

+0

Je ne sais pas comment configurer Gilead avec JPA. Si j'utilise Gilead, EMF.java reste le même, ou doit être configuré = avec HibernateJpaUtil etc comme le suggère le tutoriel de Gilead? –

+0

vous pouvez utiliser ce gestionnaire d'entité sur le côté serveur, pas de problèmes. Mais pour le côté client - suivez tutoriel gilead. – Bozho

+0

J'utilise RPC pour le passer au client, mais il ne peut pas désialiser les collections avec des annotations comme des relations @OneToOne. C'est pourquoi je veux utiliser Gilead, mais je ne peux pas faire fonctionner le tutoriel. Je suis juste un étudiant. Merci pour votre aide de toute façon :) –