Как обновить Объект в игровой среде? - PullRequest
2 голосов
/ 25 сентября 2011

Как мне отредактировать существующий объект в базе данных?Например, если у меня есть такая модель: class Topic{title,content,author}, когда я редактирую и сохраняю объект, я не хочу снова добавлять объект «автор».Как мне обновить существующий объект вместо добавления нового?

Ответы [ 2 ]

4 голосов
/ 25 сентября 2011

Если вы посмотрите на часть документации JPA Object Binding в документации, вы увидите, что она объясняет, что, если вы передаете объект вашему контроллеру, содержащий идентификатор, объект сначала автоматически загружается избаза данных, а затем переданные новые поля добавляются в объект.

Это означает, что вы можете просто вызвать метод save().

Таким образом, действие вашего контроллера может быть чем-то вроде

public static void editTopic(Topic topic) {
   topic.save();
   //...any post edit processing
}
4 голосов
/ 25 сентября 2011

Если вы наследуете от класса Model (как и должно быть), он предоставляет метод save(), а также атрибут ID.Когда вы вызываете save() для объекта, который вы получили из базы данных, он будет обновлен, а если вы вызовете его для нового объекта, он будет сохранен в базе данных.Все это автоматически!

Обновление только определенных полей

Model.save() сохраняет весь объект, поэтому, если вы хотите обновить только некоторые поля данных в вашем объекте, вам сначала нужно создать точный объектВы хотите зайти в свою базу данных.Допустим, вы не хотите обновлять пустые поля, используя ваш Topic(id, content, author) объект:

Topic newT = Topic(1L, 'yyy', null);
Long id = newT.getID();

Topic oldT = Topic.findByID(id);  //Retrieve the old values from the database

Author newAuthor = newT.getAuthor(); //null

if (newAuthor != null) {  //This test will fail
  oldT.setAuthor(newAuthor);  //Update the old object
}

String newContent = newT.getContent(); //Not null

if (newContent != null) {
  oldT.setContent(newContent);  //Update the old object
}

// Now the object oldT holds all the new, non-null data.  Change the update tests as you see fit, of course, and then...

oldT.save();  //Update the object in the database.

Вот как я бы это сделал.В зависимости от того, сколько полей у вас есть, этот код очень быстро станет неуклюжим.Определенно поместите это в метод.Также, см. Здесь о findByID () и других способах извлечения объектов из базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...