Eliminar una entidad con llave y sin ir a buscar primero en el motor de aplicación (usando JDO)

StackOverflow https://stackoverflow.com/questions/1692508

Pregunta

¿Hay una manera de eliminar una entidad sin tener que buscarlo desde el almacén de datos en primer lugar? Estoy asumiendo que ya tengo la llave o la identificación de la entidad. Estoy pensando en algo así como deleteObjectById que sería un análogo a getObjectById en PersistenceManager.

Lo más cerca que puedo pensar es el uso de Query.deletePersistentAll() (como se ve aquí ) y especificando una consulta que sólo se basa en la llave, pero no puedo decir si eso va a buscar a la entidad antes de eliminarlo.

gracias

EDIT: Yo sé cómo hacer esto utilizando la API de bajo nivel, así como en la API de Python. Me preguntaba si había una manera de hacerlo dentro de la capa de JDO.

¿Fue útil?

Solución

DataNucleus respondió a mi pregunta sobre la grupo de Google :

  

En realidad no. La cuestión es que un objeto puede tener relaciones y por lo tanto,   ya que estos pueden causar cascada de operaciones, que por lo general tiene que ser   cargado en la memoria primero. La única situación en la que no necesitaría   ser cargado en la memoria era si la clase del objeto a ser eliminado tenido   no hay relaciones.

     

Al entrar en la API de bajo nivel y la voladura de distancia objetos pueden o no pueden   tener un impacto en objetos relacionados ... tal vez alguien responsable de   podría comentar sobre eso.

Otros consejos

No estoy seguro acerca de JDO, pero para Python esto es posible con un pequeño truco. Es necesario "crear" una nueva instancia con la misma clave y luego eliminarlo. Llegará a la base de datos sólo una vez.

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

¿Cómo sobre el uso de la API de bajo nivel ?

Creo DataService.delete(Key) hará exactamente lo que necesita.

Si utiliza una larga como la clave, se define a utilizar el KeyMaker para crear una clave primero.

Key k = KeyFactory.createKey(Employee.class.getSimpleName(), "Alfred.Smith@example.com");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top