当前位置: 首页 > 知识库问答 >
问题:

@NamedQuery在Spring Data Rest JpaRepository中重写findAll

能翔宇
2023-03-14

有没有办法覆盖Spring Data Rest执行的findAll查询?

我需要一种基于一些特定标准过滤结果的方法,似乎使用@NamedQuery应该符合我正在寻找的内容,所以我设置了一个测试

@Entity
@Table(name = "users")
@NamedQueries({
    @NamedQuery(name = "User.findAll", query="SELECT u FROM User u WHERE u.username = 'test'"), 
    @NamedQuery(name = "User.findNameEqualsTest", query="SELECT u FROM User u WHERE u.username = 'test'")   
})
public class User implements Serializable, Identifiable<Long> { }

有了它,我希望SDR利用我的findAll()查询(返回1个结果),但它执行相同的旧findAll逻辑(返回所有结果)。

在我的存储库中,我添加了:

@Repository
@RestResource(path = "users", rel = "users")
public interface UserJpaRepository extends JpaRepository<User, Long> {

    public Page<User> findNameEqualsTest(Pageable pageable);
}

在本例中,它会提取提供的@NamedQuery。所以

我应该如何覆盖默认的findAll()逻辑?我需要实际构建一组复杂的标准,并将其应用于结果集。

共有2个答案

匡祖鹤
2023-03-14

是的,您可以创建存储库接口的实现,中有一个耦合部分

http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/repositories.html#repositories.custom-implementations

存储库

   @Repository
    public interface PagLogRepository extends JpaRepository<PagLogEntity, Long>, PagLogCustomRepository {

自定义接口

public interface PagLogCustomRepository {
PagLogEntity save(SalesForceForm salesForceForm) throws ResourceNotFoundException;

自定义实现

public class PagLogRepositoryImpl implements PagLogCustomRepository {
@Override
    public PagLogEntity save(final SalesForceForm salesForceForm) throws ResourceNotFoundException {

        query = emEntityManager.createNamedQuery("findItemFileByDenormalizedSku", ItemFileEntity.class);
        query.setParameter("skuValue", rawSku);

您可以创建复杂的自定义,而不是使用findAll覆盖save make it

强德厚
2023-03-14

在即将发布的SpringDataJPA版本1.5(我们的里程碑存储库中提供了RC)中,您只需在存储库界面中重新声明该方法,并使用@Query对其进行注释,即可触发执行为查询方法。这将导致查找命名查询,就像您已经习惯于从查询方法中查找一样:

interface UserJpaRepository extends PagingAndSortingRepository<User, Long> {

  @Query
  List<User> findAll();

  Page<User> findNameEqualsTest(Pageable pageable);
}

关于存储库声明的一些注意事项:

  • 您不需要用@Repository注释接口。那个注释在这里根本没有任何作用。
  • 您的@RestResources注释以一种在Spring Data REST 2.0(也在RC中)中无论如何都是默认的方式配置导出器。向前看,更喜欢@RestRepositoryResources,但是正如我所说的:无论如何,多元化都是默认的。
  • 我们通常不建议扩展特定于存储的接口,而是使用CrudRepositoryPagingAndSortingRepository
 类似资料:
  • 问题内容: 我想在haversine公式的查询下运行为NamedQuery,但我不知道如何纠正它。 我将查询运行到mysql中,对我来说很好用,但是当我将以下查询写为NamedQuery时,它给了我错误: 例外: 谁能帮助我,告诉我这是怎么回事? 问题答案: 终于能够找到解决方案。我使用createNativeQuery代替createQuery,它解决了我的问题。

  • 家长: 儿童:

  • 我想在一个JpaRepository中使用一个命名查询。但它不起作用: 结果: 更新: 仍然相同的例外:

  • 奇怪的是,hibernate JQL不能识别正确的函数。不使用子字符串,在hibernate中有没有办法在namedquery中指定任何有效的数据库函数?我不希望将其设置为本机查询或CriteriaQuery。

  • 问题内容: 我正在尝试在我的PHP应用程序中实现URL重写。有人可以分享在PHP和MySQL中实现URL重写的分步过程吗? 在我的应用程序中,我想实现以下URL重写,我想重定向 至 请告诉我如何以上述任何一种方式实现这两个URL重写。 根据以下两种类型中的SEO,管理,应用程序的观点,哪个URL最好是另一件事。 问题答案: 通常,这只不过是启用mod_rewrite模块(您可能已经在主机上启用了该

  • 在Weblogic 12c中重写Spring jar时,我们一直面临一个问题。基本上,我们需要基于调用其接口的第三方API编写一个bean。现在他们使用Spring2.5JAR来实现自己的功能。因为Weblogic本身就支持Spring 3.0 jar。因此,当我们编写bean包装其接口并进行部署时,它不起作用。我们在本地环境中将Spring 2.5 jar替换为Spring 3,从而复制了这个问