UserController
SessionScopedBeanに次のコードがあります
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;
}
このコードはprivate ItemEntity item;
、次のJSFマークアップによって渡されるものを使用します。
<p:commandLink action="#{itemController.item}">
<f:setPropertyActionListener target="#{itemController.selectedItem}" value="#{movie}" />
</p:commandLink>
(この例ではPrimeFacesを使用しています)問題は、addItemToBundle
がコンソールでSQLコードを呼び出さず(FINEを有効にしている)、バンドルが作成されたり、ユーザーに追加されたりしないことです。また、UserEntityでcascadeTypeを設定しようem.persist(user)
としましたが、うまくいきませんでした。em.flush()
@OneToMany(mappedBy="userEntity",cascade=CascadeType.PERSIST)
private Set<BundleEntity> bundleEntities;
ありがとう!