有没有办法覆盖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()
逻辑?我需要实际构建一组复杂的标准,并将其应用于结果集。
是的,您可以创建存储库接口的实现,中有一个耦合部分
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
在即将发布的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
,但是正如我所说的:无论如何,多元化都是默认的。 CrudRepository
或PagingAndSortingRepository
。问题内容: 我想在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,从而复制了这个问