有没有办法在Spring Data中使用常量@Query注释值?

2022-09-01 00:33:47

我不想对常量值进行硬编码,我宁愿通过引用变量指定它们。

例如,与其编写下一个查询:

@Query(value = "SELECT u FROM UserModel u WHERE u.status = 1")

..我想提取硬编码值“1”并编写如下内容:

@Query(value = "SELECT u FROM UserModel u WHERE u.status = UserModel.STATUS_ACTIVE")  //doesn't compile

有没有办法像spring数据查询中的第二个示例那样指定常量?


答案 1

您必须使用完全限定的类名,如下所示:

@Query("SELECT u FROM UserModel u WHERE u.status = com.example.package.UserModel.STATUS_ACTIVE")

不过,它的坏处是IDE不会将其视为类UserModel的用法。唯一的优点是您可以将值保存在一个地方,这在大多数情况下就足够了。此问题已在 IntelliJ IDEA 2017.1 中得到解决。我不知道其他IDE。


答案 2

我建议在实体上创建该枚举的字段。Enum

public enum UserModelStatus{
     ACTIVE, INACTIVE
}

public UserModel{

    /* Other fields ommitted */

    @Enumerated(EnumType.STRING)
    private UserModelStatus status;

    /* Get/Set Method */
}

然后创建您的存储库方法:

@Repository
public interface UserModelRepository extends JpaRepository<UserModel, Long>{

    public List<UserModel> findByStatus(UserModelStatus status);

}

使用Spring Data,您甚至不需要编写JPQL,只需调用以下方法:

   @Autowired
   UserModelRepository userModelRepository;

   public void someMethod(){
       List<UserModel> userModels = userModelRepository.findByStatus(UserModelStatus.ACTIVE);
   }

推荐