Spring boot 一种服务两种回购

Spring boot 一种服务两种回购,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,标题如下所示。问题是,当我调用EDIRepoName.findById(shortName)时,我得到一个错误,表明它使用了错误的repo。(我保证短名称是唯一的,但我需要使用它进行查找。) Wed May 27 09:43:49 EDT 2020发生意外错误 (类型=内部服务器错误,状态=500)。提供了错误的id 类com.example.ta_edi.model.EDIType的类型。预期:班级 java.lang.Long,得到类java.lang.String;嵌套异常 谢谢,但是我在

标题如下所示。问题是,当我调用EDIRepoName.findById(shortName)时,我得到一个错误,表明它使用了错误的repo。(我保证短名称是唯一的,但我需要使用它进行查找。)

Wed May 27 09:43:49 EDT 2020发生意外错误 (类型=内部服务器错误,状态=500)。提供了错误的id 类com.example.ta_edi.model.EDIType的类型。预期:班级 java.lang.Long,得到类java.lang.String;嵌套异常

谢谢,但是我在下面先做了这个修改,然后得到了下面的错误

public interface EDITypeNameRepository extends CrudRepository<EDIType,String> {     
    @Query("SELECT p FROM EDIType WHERE LOWER(p.shortName)=LOWER(:shortName)")
        public List<EDIType> byShortName(@Param("shortName") String shortName);

}
public接口editypenamepository扩展了crudepository{
@查询(“从编辑类型中选择p,其中LOWER(p.shortName)=LOWER(:shortName)”)
按shortName(@Param(“shortName”)字符串shortName)公开列表;
}
创建名为“EdityNameRepository”的bean时出错:FactoryBean 在对象创建时引发异常;嵌套异常是 java.lang.IllegalArgumentException:查询的验证失败 方法public abstract java.util.List com.example.ta_edi.repository.EdityNameRepository.byShortName(java.lang.String)


显示
EDIType
的源代码。似乎存在问题-您的实体具有
Long
id,但没有
String


所以你的身份证很长。只需将findByShortName方法添加到正确的存储库并调用它

按短名称搜索不需要两个存储库。 只需将
findByShortName
方法添加到
EDITypeRepository

public interface EDITypeRepository extends CrudRepository<EDIType,Long> {   
     Optional<EDIType> findOneByShortName(String name) 
}
public接口EDITypeRepository扩展了crudepository{
可选findOneByShortName(字符串名称)
}

对于您的问题来说,这就足够了

您的编辑类型的ID为Long或String。您不能两者都有。您想用这两个存储库实现什么?但是,这就像魔术一样;)如果你有时间的话,为什么我的JPA查询没有成功?它尝试使用“值”来阻止验证。Crudepository是否为类的每个元素创建了一个方法?再次感谢您。由于存储库不正确,您的尝试没有成功。实体的id很长,但您没有尝试为基于字符串的实体创建存储库。您应该查看spring手册,了解Crudepository的工作原理
public interface EDITypeNameRepository extends CrudRepository<EDIType,String> {     
    @Query("SELECT p FROM EDIType WHERE LOWER(p.shortName)=LOWER(:shortName)")
        public List<EDIType> byShortName(@Param("shortName") String shortName);

}
public interface EDITypeRepository extends CrudRepository<EDIType,Long> {   
     Optional<EDIType> findOneByShortName(String name) 
}