Pergunta

Existe uma maneira de excluir uma entidade sem ter que buscá-lo do armazenamento de dados em primeiro lugar? Eu estou supondo que eu já têm a chave ou ID para a entidade. Estou pensando em algo como deleteObjectById que seria um análogo para getObjectById em PersistenceManager.

O mais próximo que posso pensar é usando Query.deletePersistentAll() (como visto aqui ) e especificando uma consulta que só se baseia na chave, mas não posso dizer se isso vai buscar a entidade antes de excluí-lo.

graças

EDIT: Eu sei como fazer isso usando a API de baixo nível, bem como na API python. Eu queria saber se havia uma maneira de fazê-lo dentro da camada JDO.

Foi útil?

Solução

DataNucleus respondeu à minha pergunta sobre o google grupo :

Não é verdade. A questão é que um objeto pode ter relações e assim, uma vez que estes podem causar cascata de operações, que normalmente tem que ser carregado na memória em primeiro lugar. A única situação em que não seria necessário ser carregado na memória era se a classe do objeto a ser excluído teve sem relações.

Indo para a API de baixo nível e atirando objetos podem ou não ter um impacto sobre objetos relacionados ... talvez alguém para responsáveis poderia comentar sobre isso.

Outras dicas

Eu não tenho certeza sobre JDO, mas para Python isso é possível com um pequeno hack. Você precisa "criar" uma nova instância com a mesma chave e, em seguida, excluí-lo. Ele vai bater o banco de dados apenas uma vez.

instance = Model(key=key_to_delete, required_property='dummy')
instance.delete()

Que tal usar o Baixo nível API ?

Eu acho DataService.delete(Key) vai fazer exatamente o que você precisa.

Se você usar um longo como chave, você vai definida para usar o KeyMaker para criar uma chave em primeiro lugar.

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top