Java 如何将参数值传递到JDBC存储库@Query
我尝试使用JDBC存储库的查找策略:Java 如何将参数值传递到JDBC存储库@Query,java,spring-jdbc,Java,Spring Jdbc,我尝试使用JDBC存储库的查找策略: @Query("select * from USERS where USERNAME = :id") User findById(@Param("id") UserId id); 如您所见,id参数具有自定义类型UserId。如何将其转换为简单字符串?我应该注册一些转换器吗?在哪里,如何 我还尝试了下一个查询。。。其中USERNAME=:id.value。。。其中USERNAME=:{id.value}但它们不起作用
@Query("select * from USERS where USERNAME = :id")
User findById(@Param("id") UserId id);
如您所见,id参数具有自定义类型UserId。如何将其转换为简单字符串?我应该注册一些转换器吗?在哪里,如何
我还尝试了下一个查询。。。其中USERNAME=:id.value。。。其中USERNAME=:{id.value}但它们不起作用
UPD
这是我的Spring引导配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
这应该起作用:
@Queryselect*来自用户名=:{id.value}的用户
使用者findById@Paramid用户标识;
在上阅读更多信息我分析了Spring源代码,发现在我考虑@ReadingConverters之前,他们使用了@WritingConverters,这就是为什么我没有成功的原因,可以通过JdbcConfiguration以通常的方式注册:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
其中UserIdToStringConverter具有下一个实现:
@WritingConverter
public class UserIdToStringConverter implements Converter<UserId, String> {
@Override
public String convert(UserId source) {
return (String) source.value();
}
}
UPD
我还发现ConditionalGenericConverter不能工作。对于条件转换器,getConvertibleTypes方法必须返回null,请参阅。但当我这样做时,不会调用matches方法。看起来像是Spring bug Spring-data-jdbc-2.0.4.RELEASE。据我所知,JPA@Query与jdbc-one不同。所以,这种方法不起作用。是的,它不是JDBC查询-默认情况下是JPQL查询,除非您使用查询的参数nativeQuery=True,但我需要org.springframework.data.JDBC.repository.query.query的解决方案-而不是org.springframework.data.jpa.repository.query。
@WritingConverter
public class UserIdToStringConverter implements Converter<UserId, String> {
@Override
public String convert(UserId source) {
return (String) source.value();
}
}