Ho alcuni oggetti che non riesco a cancellare e devo aggiornare un campo comune chiamato "cancellato" al posto di esso. Ho letto there che posso scrivere querys generici, usando #{#entityName}
. Per questo motivo ho cercato di ignorare CrudRepository#delete(…)
metodo come questo:Come sovrascrivere un metodo di cancellazione su un Data CrudRepository Spring?
public interface DeleteableRepository<T, ID extends Serializable> extends CrudRepository<T,ID>{
@Override
@Query("UPDATE #{#entityName} x set x.deleted = 1 where x.id = ?1")
public void delete(ID id);
}
Ma ho una prova di unità che mostra me sbagliato!
@Test
public void testDelete() {
SomeDeleteableObject sdo = new SomeDeletableObject();
sdo = getDeleteableRepository().create(sdo);
Assert.assertNotNull(sdo);
Assert.assertNotNull(sdo.getId());
Assert.assertFalse(sdo.isDeleted());
getDeleteableRepository().delete(sdo);
sdo = getDeleteableRepository().findOne(sdo.getId());
//Fails here
}
Non è possibile sovrascrivere i metodi CrudRepository
in questo modo?
Perché si desidera modificare il comportamento dell'archivio di eliminazione e non gestire questa situazione nel livello di servizio? – gipinani
perché se potessi gestirlo sul livello del repository non ho bisogno di implementare servizi o Daos extra. –