我是playframework的新手。我使用createSQLUpdate语句更新了记录。我希望使用Ebean内置的保存方法来实现相同的目的。
当我在下面的代码中执行在bar1.setplace中获取[NullPointerException:null]时。
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>
答案 0 :(得分:0)
最简单的方法是调试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);
}
您的代码可能是正确的,但我认为您想要的是使用标识符&#34; name&#34;更新Bar对象。因此,您从表单中获取bar
,从表中获取bar1
。因此,您将新位置设置为bar1并想要更新它。重要的是要知道,如果您使用update()
,则只能更新一行,因为如果您想要编写新的save()
,则只能使用{{1}}。如果我误解了任何事情,请告诉我;)