Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将参数值传递到JDBC存储库@Query_Java_Spring Jdbc - Fatal编程技术网

Java 如何将参数值传递到JDBC存储库@Query

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}但它们不起作用

我尝试使用JDBC存储库的查找策略:

@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();
    }
}