Весеннее слияние JSON - PullRequest
       21

Весеннее слияние JSON

0 голосов
/ 21 декабря 2011

Я обновляю запись из формы поверх AJAX.У меня есть объект JSON, который отображается на мою сущность, и мой метод контроллера:

@RequestMapping(value = "/vendors", method = RequestMethod.POST)
public ResponseEntity<String> saveVendorsJson(@RequestParam String vendor) {
    Vendor v = Vendor.fromJsonToVendor(vendor);

    if (v.merge() == null) {
        v.persist();
    }
    return new ResponseEntity<String>(HttpStatus.OK);
}

Я ожидал от документации, что v.merge () вернет ноль, если не найдет существующую записьполе 'id' объекта для слияния, и в этом случае я хочу сохранить его как новый объект Vendor.

Что происходит, несмотря на то, что мой JSON имеет значение поля 'id', соответствующее существующей записиЯ ВСЕГДА вставляю новую запись с моими обновленными товарами из браузера.

Я знаю, что у меня есть метод POST с двойной нагрузкой, что не совсем RESTful.Теоретически для меня это проще (хотя, конечно, это не так).

1 Ответ

0 голосов
/ 19 марта 2012

Я верю, что это Hibernate. Hibernate не будет «сливаться», если он не знает, что он уже существует. Я думаю, что я сделал в прошлом, чтобы сделать поиск, а затем упорствовать. Я думаю, что если вы попытаетесь просто объединить что-то, поступающее по проводам, вы получите столкновение первичных ключей или нечто подобное. Я считаю, что в Hibernate есть какой-то «грязный» флаг, указывающий, создаете ли вы или редактируете существующий объект.

Раньше в raw-Hibernate также был способ сделать мягкий поиск, в основном сказать Hibernate: «У меня есть этот объект, я не хочу делать SELECT бла-бла-бла, я просто хочу обновить некоторые поля ". Это загрузит объект в Cache и позволит вам выполнить обновление, не выполняя SELECT. В Spring также есть updateOrSave (), но это на самом деле делает SELECT первым.

...