をカスケード/永続ではない私は、私のセッションスコープの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;
ありがとうございます!
私はと思ったいくつかの理由'getMessage()'はメッセージを出力しました。愚かな私.. – knownasilya
これは方法で助け、今私はバンドルを維持することができますが、一貫していません。時々、私はボタンを一度押す必要があります。それは一度だけ、他の時は何も起こりません。また、e.printStackTrace()は良い方法ですか?いいえ? – knownasilya