如何在@Query 注释中使用参数的方法 [英] How can I use parameter's method in @Query annotation

查看:70
本文介绍了如何在@Query 注释中使用参数的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在@Query注解中调用参数的方法?

Is it possible to invoke parameter's method inside @Query annotation?

示例:

@Query("SELECT user " +
    "FROM User user " +
    "WHERE (?1.getFilter() = '*' OR user.name = ?1)");
List<User> getUsers(UserNameFilter userNameFilter);

我知道我可以做这样的事情:

I know that I can do something like this:

@Query("SELECT user " +
    "FROM User user " +
    "WHERE (?1 = '*' OR user.name = ?1)");
List<User> getUsers(String userName);

但是当过滤器的数量增加时,这意味着我需要更改一些参数.

But when a number of filters are increasing it means that I need to change a number of parameters.

推荐答案

例如,通过 SpEL,您可以在查询中使用 Spring bean 方法

With SpEL you can use Spring bean methods in your queries, for example

@Query("select e from MyEntity e where ?#{@myBean.myMethod(#param1)} is true")
List<MyEntity> entities = getEntity(@Param("param1") String param);

您可以以任何适当的方式定义您的 bean,例如:

You can define your bean in any proper way, for example:

@Component
public class MyBean {
    public boolean myMethod(String param) {...}
}

或者它甚至可以是同一个仓库:

Or it can be even the same repo:

public interface MyRepo extends JpaRepository<MyEntity, Long> {

    @Query("select e from MyEntity e where ?#{@myRepo.myMethod(#param1)} is true")
    List<MyEntity> entities = getEntity(@Param("param1") String param);

    default boolean myMethod(String param) {...}
}

您也可以在查询中使用参数属性:

Also you can use parameter properties in your queries:

@Query("select u from User u where u.firstname = ?#{#customer.firstname}")
List<User> findUsersByCustomersFirstname(@Param("customer") Customer customer);

附加信息:1, 2, 3

这篇关于如何在@Query 注释中使用参数的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆