使用Playframework和bean更新单个MYSQL表记录时出现Nullpointer异常

使用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.

我不熟悉游戏框架。我已经使用createSQLUpdate语句更新了记录。我希望使用内置的保存方法实现同样的效果

当我在下面的代码中执行在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>
使用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值。看见