2012-05-03 5 views
1

je le code suivant dans UserController dans ma session Scoped BeanJPA @OneToMany pas persistant/cascade

public void addItemToBundle(ItemEntity item){ 
    //System.out.println(item.getTitle()); 
    try { 
     em.getTransaction().begin(); 
     UserEntity user = em.find(UserEntity.class, this.username); 
     BundleEntity bundle = new BundleEntity(); 
     BundleEntityPK compositePk = new BundleEntityPK(); 
     compositePk.setCheckedOutDate(new Date()); 
     compositePk.setItemId(item.getItemId()); 
     compositePk.setUsername(user.getUsername()); 
     bundle.setId(compositePk); 
     Set<BundleEntity> bundles = new HashSet<BundleEntity>(); 
     bundles.add(bundle); 
     user.setBundleEntities(bundles);   
     em.persist(user); 
     em.flush(); 
     em.getTransaction().commit(); 
    } finally { 
    } 
} 


public String addToBundle(){   
    try { 
     addItemToBundle(item); 
    } catch (NullPointerException e) { 
     e.getMessage(); 
    } 

    return null; 
} 

Ce code utilise private ItemEntity item; qui se transmet dans le balisage JSF suivant:

<p:commandLink action="#{itemController.item}"> 
    <f:setPropertyActionListener target="#{itemController.selectedItem}" value="#{movie}" /> 
</p:commandLink> 

(J'utilise PrimeFaces dans cet exemple) Le problème est que le addItemToBundle n'appelle aucun code SQL dans la console (j'ai activé FINE) et le bundle n'est jamais créé ou ajouté à l'utilisateur. J'ai également essayé em.persist(user) et em.flush() et en définissant cascadeType dans mon UserEntity sans chance.

@OneToMany(mappedBy="userEntity",cascade=CascadeType.PERSIST) 
private Set<BundleEntity> bundleEntities; 

Merci!

Répondre

3

Vous savez que ceci:

try { 
    addItemToBundle(item); 
} catch (NullPointerException e) { 
    e.getMessage(); 
} 

est très mauvaise pratique, non? Peut-être, c'est le problème ici, vous rencontrez un NPE et ne le remarquez jamais.

Vous devriez au moins enregistrer l'exception de savoir ce qui se passe là-bas (juste à des fins de démonstration, je l'ai utilisé stdout, s'il vous plaît remplacer par votre cadre de l'exploitation forestière préférée):

try { 
    addItemToBundle(item); 
} catch (NullPointerException e) { 
    System.err.println(e.getMessage()); //use logger here 
} 
+0

Pour une raison quelconque, je pensais que 'getMessage()' a imprimé le message. Silly moi .. – knownasilya

+0

Cela a aidé d'une certaine manière, maintenant je peux persister le Bundle mais pas toujours. Parfois, je dois appuyer sur le bouton une fois, d'autres fois c'est une fois, et d'autres fois rien ne se passe .. aussi, e.printStackTrace() est-il une bonne pratique? ou pas? – knownasilya

Questions connexes