我正在尝试使用JPA更新表格
EntityManager em=JPA.em();
EntityTransaction entr = em.getTransaction();
try{
if(!entr.isActive())
entr.begin();
Tblrecordtypefields updateTblrecordtypes = em.find(Tblrecordtypefields.class,9);
updateTblrecordtypes.setFieldlabel("JPATest");
em.getTransaction().commit();
}finally
{
if(entr.isActive())
entr.rollback();
}
我收到了错误 发生NullPointerException:null at updateTblrecordtypes.setFieldlabel( “JPATest”); 我该怎么办。
答案 0 :(得分:2)
我在那里看到一些可能的问题:
首先,Play自己管理交易。事务在请求开始时创建,并在最后提交(如果异常则回滚)。你试图强行进入它,这是不推荐的。要管理实体,只需执行entity.save()将其标记为“要保存”,不要忽略任何更改。
其次,如果您在Play中使用Model类(如您所愿),则可以使用此类提供的“find”和“findById”方法。建议这样做,而不是直接使用EntityManager。
有关详细信息,请参阅documentation。
基本上,重做您的代码以遵循Play方式,以避免问题:)
编辑:作为一个澄清,我并没有真正回答你为何获得NPE的问题,但我认为,当你强行进入框架的设置时,你可能(也许不会!)看到意外一旦您修复代码以遵循约定,将会消失的工件。如果之后您仍然有错误,请告诉我们:)
答案 1 :(得分:1)
这意味着实体9
映射的数据库表中没有ID为Tblrecordtypefields
的行。
答案 2 :(得分:0)
我已将代码更改为
Tblrecordtypefields updateTblrecordtypeFields = Tblrecordtypefields.findById(9);
updateTblrecordtypeFields.setFieldlabel("Test");
validation.valid(updateTblrecordtypeFields);
if(validation.hasErrors())
{
updateTblrecordtypeFields.refresh();
}
else
{
updateTblrecordtypeFields.save();
}
在我的模型类中
public void setFieldlabel(String fieldlabel) {
this.fieldlabel = fieldlabel;
}
工作得很好.....