我在Session Scoped Bean中的UserController
中有以下代码
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),并且永远不会创建或添加用户包。我还尝试了em.persist(user)
和em.flush()
并在我的UserEntity中设置了cascadeType而没有运气。
@OneToMany(mappedBy="userEntity",cascade=CascadeType.PERSIST)
private Set<BundleEntity> bundleEntities;
谢谢!
答案 0 :(得分:3)
你知道这个:
try {
addItemToBundle(item);
} catch (NullPointerException e) {
e.getMessage();
}
是非常糟糕的做法,对吗?也许,这就是问题所在,你遇到了一个NPE,从来没有注意到它。
你至少应该记录异常才知道那里发生了什么(仅用于演示目的,我使用过stdout,请替换你最喜欢的日志框架):
try {
addItemToBundle(item);
} catch (NullPointerException e) {
System.err.println(e.getMessage()); //use logger here
}