2015-09-14 8 views
0

Je suis nouveau à demande feuillue. Je suis en mesure d'exécuter l'application en utilisant tomcat + intégration mysql bien. Maintenant, je veux passer au développement pour personnaliser le projet du site selon mes besoins.Je ne suis pas en mesure de stocker l'entité en utilisant em.merge dans feuillue

Je suis coincé sur le point de persistance dans le module de site broadleaf. J'ai essayé d'employer em.merge qui renvoie mon entité mais ne l'enregistre pas dans la base de données et a également essayé @Transactional(value="blTransactionManager") mais le problème persiste toujours. J'ai essayé le code ci-dessous dans applicationContext-servlet.xml

<aop:config> 
    <aop:pointcut id="blMyStoreDao" expression="execution(* com.mycompany.dao.StoreDaoImpl.save*(..))"/> 
    <aop:advisor advice-ref="blTxAdvice" pointcut-ref="blMyStoreDao"/> 
    </aop:config> 

Voici mon code de contrôleur

newStore.setCustomer(customer); 
    newStore.setProductList(new ArrayList<ProductImpl>()); 
    Store getStore=store.save(em, newStore); 
    System.out.println(getStore.getCustomer().getUsername()); 
    System.out.println("customer fetched: "+customer.getEmailAddress()); 

Voici mon code daoimpl

@Repository("blMyStoreDao") 
    @Transactional(value="blTransactionManager") 
    public class StoreDaoImpl implements StoreDao { 

     @PersistenceContext(unitName="blPU") 
     protected EntityManager em; 



     @Transactional(value="blTransactionManager") 
     public Store save(EntityManager em, Store store) { 

      System.out.println(em); 

      System.out.println(store.getCustomer().getUsername()); 
     Store s= em.merge(store); 
      return s; 


     } 


    } 

Mais il n'a pas non plus résoudre mon problème. Le code fonctionne parfaitement comme il se doit, mais il ne sauvegarde pas mon entité dans la base de données.

Tout le monde aide. Merci à l'avance

+0

Pouvez-vous essayer em.flush() après em.merge (stocker) dans votre StoreDaoImpl et publier l'exception –

+0

Pourquoi diable passez-vous dans le 'EntityManager'? Vous devriez utiliser l'instance 'EntityManager' du dao, pas celle que vous avez passée. Ensuite, vous avez' @ Transactional', alors assurez-vous d'avoir '' dans votre configuration. –

+0

J'ai fait la même chose mais ça n'injectait pas l'em dans daoimpl. Une autre chose concerne @transectional. où

Répondre

0
  1. Il n'y a aucune raison d'utiliser <aop:config> surtout dans applicationContext-servlet.xml (si partout où il devrait être dans le contexte de l'application racine)
  2. Vous devez utiliser @Transactional(TransactionUtils.DEFAULT_TRANSACTION_MANAGER pour annoter votre méthode
  3. Il est probable que votre classe n'était pas scannée par Spring. Dans Broadleaf, une analyse de composant par défaut est configurée dans applicationContext.xml pour analyser com.mycompany.core.

Je vous recommande de vérifier que votre dao est effectivement scanné par Spring et qu'il est initialisé en tant que haricot de printemps. Le fait que le gestionnaire d'entité n'a pas été injecté indique qu'il n'a pas été chargé correctement par Spring. Une façon de vérifier cela serait d'ajouter une méthode @PostConstruct et d'imprimer quelque chose ou de définir un point d'arrêt pour vérifier qu'il est frappé.