отсоединенный объект, переданный для сохранения при использовании RequestFactory

Я пытаюсь использовать RequestFactory, но у меня возникают проблемы с изменением существующих записей. Я продолжаю получать org.hibernate.PersistentObjectException: отдельный объект, переданный для сохранения, хотя я не понимаю, что не так.

У меня есть следующий класс:

@Service(Product.class)
public interface ProductRequest extends RequestContext {

    Request<Long> countProducts();

    Request<ProductProxy> findProduct(Long id);

    Request<List<ProductProxy>> findAllProducts();

    InstanceRequest<ProductProxy, Void> persist();

    InstanceRequest<ProductProxy, Void> remove();

}

У меня есть функция, которая перечисляет все продукты (полученные через findAllProducts()), а затем я хочу изменить один продукт. Для этой цели я использую следующий код:

public void changeProductDetails(ProductProxy prod) {
        ProductRequest newProductRequest = MyApplication.getRequestFactory().productRequest();
        ProductProxy editedProduct = newProductRequest.edit(prod);
        editedProduct.setPurpose("new purpose string");
        newProductRequest.persist().using(editedProduct).fire(new Receiver<Void>() {
            @Override
            public void onSuccess(Void arg0)
            {
                System.out.println("Product changed");
            }
        });
    }

person Roalt    schedule 07.10.2011    source источник


Ответы (1)


Что неправильно, так это то, что persist нельзя вызывать для отсоединенных объектов. Целью persist-метода является сохранение новых объектов.

Что вы хотите сделать, так это объединить изменения из отдельного объекта. Это делается с помощью метода merge в Hibernate/JPA.

person Mikko Maunu    schedule 07.10.2011
comment
Да, я только что узнал, что проблема действительно была на стороне сервера, и у меня все заработало. Меня немного сбили с толку все примеры, где в классе ...Request используется только функция persist(). Теперь я добавил метод «сохранить», и теперь все работает! - person Roalt; 07.10.2011