当前位置: 首页 > 面试题库 >

如何在Spring Data CrudRepository上覆盖Delete方法?

巩选
2023-03-14
问题内容

我有一些无法删除的对象,必须更新一个名为“ deleted”的通用字段。我在那儿读到可以使用编写通用查询#{#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方法?


问题答案:

要修改查询,您需要@Modifying在方法中添加一个。

确保您了解所选方法的副作用:

  • 执行操作查询几乎会绕过所有EntityManager缓存。因此,后续的findOne(…)可能/将仍然返回您尝试删除的对象的旧实例,以防EntityManager它已经加载了它。为避免这种情况,请将clearAutomatically标志设置为@Modifyingtrue但请注意,这将导致所有待处理的更改被清除。
  • 对于基于查询的数据操作 没有 生命周期回调将被触发并 没有 级联将在持久化上下文的水平被触发。这意味着侦听@PreUpdate事件的实体侦听器不会收到通知。还有任何级联操作


 类似资料:
  • 问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS

  • 我在我的项目中使用lombok,并在POJO类上使用和注释生成和。我试图重写属性的setters方法,但它不起作用 我想检查JSON属性是空的还是空的,我想在Setter方法中设置默认值 工作场景: 失败的场景: 输出: 我也将此作为参考,但到目前为止运气不佳

  • 问题内容: 我使用的龙目岛在我的项目和产生和使用,并注解POJO类的顶部。我正在尝试覆盖属性的setter方法,但是它不起作用 我想检查JSON属性是否为空或空,我想在Setter方法中设置默认值 工作方案: 失败的情况: 输出: 问题答案: 您只是遇到了一个我从未见过的错误,或者您正在测试错误。 像这样的注释 在现场一级确实阻止了设置器的生成。但是考虑到要定义一个setter,您甚至不需要它。显

  • 我想重写java中的getProperty()方法。util。物业类别,请告知。 1.Spring上下文文件 2.Java类 3.配置文件 仅供参考:我正在从配置文件中提取批次值,并希望在从中获取值后调用trim()。属性,以避免代码冗余,尝试重写getProperty()方法。 使用:Spring 4.0

  • 在这个特定的示例中,我扩展了

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个