【发布时间】:2014-06-04 02:15:00
【问题描述】:
我有一些无法删除的对象,必须更新一个名为“已删除”的公共字段来代替它。我读到there 可以使用#{#entityName} 编写通用查询。
出于这个原因,我尝试像这样覆盖 CrudRepository#delete(…) 方法:
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);
}
但是我有一个单元测试显示我错了!
@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
}
难道不能重写 CrudRepository 这样的方法吗?
【问题讨论】:
-
为什么要修改删除存储库行为而不是在服务层处理这种情况?
-
因为如果我可以在 Repository Layer 上处理这个问题,我就不需要实现额外的服务或 Daos。
标签: java crud spring-data jpql