如何在spring boot中注册jpa转换器?

时间:2016-10-18 08:57:25

标签: java spring spring-boot spring-data spring-data-jpa

我有一个名为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]转换为type   [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 个答案:

答案 0 :(得分:2)

看起来Spring的转换器(springframework.core.convert.converter.Converter)不适用于JPA。

U可能必须使用JPA属性转换器:http://www.thoughts-on-java.org/jpa-21-type-converter-better-way-to/

Spring可以让Spring的转换器与JPA一起工作,所以它与其他spring-data- *项目一致。

相关问题