0

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()を介して取得)があり、1つの製品を変更したいと思います。この目的のために、私は次のコードを使用します。

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

1 に答える 1

1

何が問題なのかというと、デタッチされたオブジェクトに対してpersistを呼び出さないでください。永続化メソッドの目的は、新しいオブジェクトを永続化することです。

実行したいのは、デタッチされたオブジェクトからの変更をマージすることです。これは、Hibernate/JPAのmergeという名前のメソッドを介して行われます。

于 2011-10-07T14:31:36.750 に答える