С этими технологиями связан следующий вопрос:
- Hibernate 4 или 3
- Пружина 3.1
- Jackson
- Ext JS 4
Предположим, у меня есть две таблицы, скажем, родительская и дочерняя.
Родительский класс выглядит следующим образом:
class Parent {
private int id;
private String name;
//getter and setter methods
}
Дочерний класс выглядит следующим образом:
class Child {
private int id;
private String name;
@ManyToOne // uni-directional many-to-one association to Parent
@JoinColumn(name = "parent_id")
private Parent parent;
//getter and setter methods
}
Теперь в базе данных уже есть данные:
Таблица: родительская
id name
===================
1 parent one
2 parent two
Таблица: ребенок
id name parent_id
=============================
1 child one 2
Вопрос : Могу ли я обновить родителя «child one» с «parent two» на «parent one»
используя эти объекты:
Parent newParent = new Parent();
newParent.setId(1);
Child child = new Child();
child.setId(1);
child.setParent(newParent);
session.saveOrUpdate(child);
Для получения дополнительной информации , дочерний объект автоматически сопоставляется Spring MVC + Джексон из JSON, который отправляется из браузера ExtJS.
Формат JSON выглядит следующим образом:
{id: 1, name: "child one", parent: {id: 1, name: "parent one"}}
Итак, дочерние и newParent объекты выше фактически созданы и установлены неявно Spring MVC + Jackson.
Таким образом, фактический код внутри контроллера Spring MVC выглядит следующим образом:
@RequestMapping(value = "child/update", method = RequestMethod.POST)
@ResponseBody
public Map<String, ?> update(@RequestBody Child child) {
// validation for child object
session.saveOrUpdate(child)
// prepare response
}
Здесь также важно , JSON, отправленный из браузера, может содержать имя нового родителя
... parent: {id: 1, name: "parent one"} ...
Хотя это свойство "name" может также отображаться Spring, оно должно быть опущено Hibernate, потому что я просто хочу обновить запись "child one", а не обновить имя (записи "parent one"). *
Я знаю, что это легко сделать с помощью HQL. Но поскольку браузер отправляет JSON, а Spring может автоматически сопоставить JSON с объектом, будет проще использовать session.saveOrUpdate () вместо HQL.
Есть предложения, как все это сделать?
Большое спасибо.