2015-05-21 1 views
2

Я новичок в playframework. Я обновил запись, используя инструкцию createSQLUpdate. Я хочу достичь того же, используя встроенный метод сохранения Ebean.Исключение Nullpointer при обновлении одной записи таблицы MYSQL с использованием Playframework и bean

Когда я выполняю это, получая [NullPointerException: null] в bar1.setplace в приведенном ниже коде.

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

Возможно, у вас нет записи в вашей базе данных, соответствующей вашему значению формы 'bar.name'. Следовательно, 'Ebean.find (Bar.class, bar.name)' возвращает 'null' и вы получаете свой NPE. –

+0

nope У меня есть значение – user3738664

+0

Предполагая, что у вас есть данные в таблице базы данных 'Bar', соответствует ли значение из' bar.name' идентификатору вашего объекта? То есть это 'bar.name' идентификатор вашей сущности (а не автоматическое генерируемое длинное значение или что-то еще)? Второй аргумент 'Ebean.find' принимает значение Id вашего объекта. См. [Здесь] (http://www.avaje.org/static/javadoc/pub/com/avaje/ebean/Ebean.html#find) –

ответ

0

Самый простой способ для отладки игры приложения и посмотреть, почему bar.place бросает NPE. Но здесь могут быть и некоторые возможности.

Первая возможность: Попробуйте использовать поглотитель:

bar1.setPlace(bar.getPlace()); 

В Bar.java вам нужно сорбент тоже.

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); 
     } 

Ваш код может быть правильным, но я думаю, что вы хотите, чтобы обновить объект Bar с «именем» идентификатором. Итак, вы получите bar из формы и bar1 из вашего стола. Поэтому вы устанавливаете новое место на bar1 и хотите его обновить. Важно знать, что вы можете обновлять строку, если используете update(), потому что вы можете использовать только save(), если хотите написать новый. Дайте мне знать, если я что-то не понял;)