我有一个名为 Lawyer
的实体和 LawyerRepository
中的以下代码:
import javaslang.control.Option;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface LawyerRepository extends JpaRepository<Lawyer, Long> {
@Query("select distinct l from Lawyer l where l.account.username = :email")
Option<Lawyer> findLawyerByEmail(@Param("email") String email);
}
如你所见,我想返回 javaslang.control.Option
而不是 java.util.Optional
. 它导致以下异常:
org.springframework.core.convert.ConversionFailedException:无法从类型[java.util.ArrayList]转换为类型[javaslang.control.Option]以获取值'[lawyer.Lawyer@5e4c0db5]';嵌套异常是org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.util.ArrayList]转换为类型[javaslang.control.Option]的转换器
这是转换器:
import javaslang.control.Option;
import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
@Component
public class OptionConverter implements Converter<ArrayList<?>, Option<?>> {
@Override
public Option<?> convert(ArrayList<?> input) {
if (true) {
throw new RuntimeException("lol");
}
return null;
}
}
我的问题是如何正确注册我提供的转换器?
1 回答
似乎Spring的转换器(springframework.core.convert.converter.Converter)不适用于JPA .
你可能不得不使用JPA属性转换器:http://www.thoughts-on-java.org/jpa-21-type-converter-better-way-to/ .
Spring可以使Spring的转换器与JPA一起使用,因此它与其他spring-data- *项目一致 .