Rom*_*man 25 java spring jpql spring-data
我不想硬编码常量值,我宁愿通过引用变量指定它们.
例如,而不是写下一个查询:
@Query(value = "SELECT u FROM UserModel u WHERE u.status = 1")
Run Code Online (Sandbox Code Playgroud)
..我想提取硬编码值'1'并写下如下内容:
@Query(value = "SELECT u FROM UserModel u WHERE u.status = UserModel.STATUS_ACTIVE") //doesn't compile
Run Code Online (Sandbox Code Playgroud)
有没有办法像弹簧数据查询中的第二个例子那样指定常量?
Cle*_*kod 27
您必须使用完全限定的类名,如下所示:
@Query("SELECT u FROM UserModel u WHERE u.status = com.example.package.UserModel.STATUS_ACTIVE")
Run Code Online (Sandbox Code Playgroud)
但它的坏处是IDE不会将其识别为UserModel类的用法.唯一的好处是您可以将值保存在一个地方,这在大多数情况下是足够的.
Kev*_*sox 10
我建议Enum
在实体上创建一个枚举字段.
public enum UserModelStatus{
ACTIVE, INACTIVE
}
public UserModel{
/* Other fields ommitted */
@Enumerated(EnumType.STRING)
private UserModelStatus status;
/* Get/Set Method */
}
Run Code Online (Sandbox Code Playgroud)
然后创建您的存储库方法:
@Repository
public interface UserModelRepository extends JpaRepository<UserModel, Long>{
public List<UserModel> findByStatus(UserModelStatus status);
}
Run Code Online (Sandbox Code Playgroud)
使用Spring Data你甚至不需要编写JPQL就像调用方法一样:
@Autowired
UserModelRepository userModelRepository;
public void someMethod(){
List<UserModel> userModels = userModelRepository.findByStatus(UserModelStatus.ACTIVE);
}
Run Code Online (Sandbox Code Playgroud)
使用方法如下:
在存储库界面中,定义一个常量,如下所示:
public static final String USER_QUERY = "SELECT u FROM UserModel u WHERE u.status = " + UserModel.STATUS_ACTIVE;
Run Code Online (Sandbox Code Playgroud)
现在你可以使用了
@Query(value=USER_QUERY)
Run Code Online (Sandbox Code Playgroud)
我已经设法通过 SpEL T() 运算符在查询中使用类 String 常量,这使您可以访问给定类上的静态方法和常量。对于字符串,我必须用单引号 (') 包装表达式,您可能也需要它(如果发生 QuerySyntaxException)。
尝试这样的事情,
@Query("SELECT u FROM #{#entityName} u " +
"WHERE u.status = #{T(fully.qualified.path.UserModel).STATUS_ACTIVE}")
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用 UserModel 而不是 #{#entityName},则不知何故它不起作用。
在其简要提及的文档中,请参阅:https : //docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-beandef-xml-based
不知道从什么时候开始支持,我有 spring-data-jpa 1.4.3,spring-framework 3.2.17
归档时间: |
|
查看次数: |
26941 次 |
最近记录: |