gpt4 book ai didi

java - 如何在@Query 注释中使用参数的方法

转载 作者:行者123 更新时间:2023-11-29 07:26:57 24 4
gpt4 key购买 nike

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

例子:

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

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

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

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

最佳答案

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

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

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

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

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

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) {...}
}

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

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

附加信息:1 , 2 , 3

关于java - 如何在@Query 注释中使用参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50447665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com