1

我的后端应用程序通过 REST API 获取 json 对象,该对象存在于数据库中但不存在于 Caeynne ObjectContext 中,如何通过 ObjectContext 按 id 删除对象。

//  <dependency>
//      <groupId>org.apache.cayenne</groupId>
//      <artifactId>cayenne-server</artifactId>
//      <version>4.0.M5</version>
//  </dependency>

import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.configuration.server.ServerRuntime;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.cayenne.test.model.Artist;

@RestController
@RequestMapping(value = "/rest")
public class ArtistRestController {

    @DeleteMapping(value = "/artist")
    public ResponseEntity deleteArtist(@RequestBody Artist artist) {

        ServerRuntime runtime = ServerRuntime
                .builder()
                .addConfig("cayenne-cayenne_test.xml")
                .build();

        ObjectContext context = runtime.newContext();

        // don't work
        context.deleteObject(artist);
        context.commitChanges();

        return new ResponseEntity<>(HttpStatus.OK);
    }
}
4

1 回答 1

1
  1. 如果您的对象具有它的所有属性并且正确设置了ObjectId,您可以执行以下操作:
context.localObject(myObject);
context.deleteObject(myObject);
context.commitChanges();
  1. 如果您只有原始 id,则应首先创建对象:
MyObject myObject = Cayenne.objectForPk(context, MyObject.class, id);
context.deleteObject(myObject);
context.commitChanges();

在这种情况下,您的对象可能会从数据库中获取,以恢复它的实际状态并跟踪可以与该对象一起删除的所有关系。

于 2017-08-23T09:35:29.253 回答