2012-05-03 10 views
1

をカスケード/永続ではない私は、私のセッションスコープのBean内UserControllerに次のコードを持ってJPA @OneToMany

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

このコードは、次のJSFマークアップによって渡されますprivate ItemEntity item;使用しています:

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

を(私はこの例でPrimeFacesを使用しています)問題は、addItemToBundleがコンソールでSQLコードを呼び出していない(FINEを有効にしています)、バンドルが作成されたりユーザーに追加されたりしないということです。私もem.persist(user)em.flush()を試してみて、私のUserEntityにcascadeTypeを設定してみました。

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

ありがとうございます!

答えて

3

あなたがこのことを知っている:

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

は、右、非常に悪い習慣ですか?たぶん、それがここの問題です。あなたはNPEに入り、決して気づかないでしょう。

あなたは、少なくとも(ちょうどデモの目的のために、私は標準出力を使用しました、お好みのロギングフレームワークを交換してください)が起こっているのかを知るために、例外をログに記録する必要があります

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

私はと思ったいくつかの理由'getMessage()'はメッセージを出力しました。愚かな私.. – knownasilya

+0

これは方法で助け、今私はバンドルを維持することができますが、一貫していません。時々、私はボタンを一度押す必要があります。それは一度だけ、他の時は何も起こりません。また、e.printStackTrace()は良い方法ですか?いいえ? – knownasilya

関連する問題