使用Playframework和bean更新单个MYSQL表记录时出现Nullpointer异常
我不熟悉游戏框架。我已经使用createSQLUpdate语句更新了记录。我希望使用内置的保存方法实现同样的效果 当我在下面的代码中执行在bar1.setplace中获取[NullPointerException:null]时使用Playframework和bean更新单个MYSQL表记录时出现Nullpointer异常,mysql,playframework,ebean,Mysql,Playframework,Ebean,我不熟悉游戏框架。我已经使用createSQLUpdate语句更新了记录。我希望使用内置的保存方法实现同样的效果 当我在下面的代码中执行在bar1.setplace中获取[NullPointerException:null]时 public static Result updateBarbean() { Bar bar = Form.form(Bar.class).bindFromRequest().get(); Bar bar1 = Ebean.
public static Result updateBarbean() {
Bar bar = Form.form(Bar.class).bindFromRequest().get();
Bar bar1 = Ebean.find(Bar.class,bar.name);
bar1.setPlace(bar.place);
Ebean.save(bar);
return ok(bar.name);
}
Index.scala.html
<h2><font color= "red"> Using bean update a record </font></h1>
<form action="@routes.Application.updateBarbean()" method="POST">
<label for="name"> Enter Your name</label> <input name="name"/> <br>
<label for="place"> Enter Your place</label> <input name="place"/> <br>
<input type="submit"/>
</form>
使用bean更新记录
输入您的姓名
进入您的位置
最简单的方法是调试play应用程序,并查看bar.place抛出NPE的原因。但这里有一些可能也会有帮助
第一种可能性:尝试使用getter:
bar1.setPlace(bar.getPlace());
在Bar.java中,您也需要getter
public whatEver getPlace() {
return place;
}
第二种可能性:你说你想更新一行,对吗?因此,我认为您的代码应该如下所示:
public static Result updateBarbean() {
Bar bar = Form.form(Bar.class).bindFromRequest().get();
Bar bar1 = Ebean.find(Bar.class,bar.name);
bar1.setPlace(bar.place);
Ebean.update(bar1);
return ok(bar.name);
}
您的代码可能是正确的,但我认为您需要的是使用标识符“name”更新Bar对象。因此,您可以从表单中获得
bar
,从表中获得bar1
。因此,您将新位置设置为bar1,并希望对其进行更新。重要的是要知道,如果使用update()
,则只能更新行,因为如果要编写新行,则只能使用save()
。如果我误解了什么,请告诉我;) 您的数据库中可能没有与bar.name
表单值匹配的记录。因此Ebean.find(Bar.class,Bar.name)
返回null
并获得NPE.nope我有这个值假设您的Bar
数据库表中有数据,那么Bar.name
中的值是否与实体的Id匹配?也就是说,bar.name
是实体的标识符(而不是自动生成的长值或其他)?Ebean.find的第二个参数取实体的Id值。看见