当前位置: 首页 > 知识库问答 >
问题:

在Spring自定义查询中找不到类型的属性

金飞翼
2023-03-14

我正在尝试实现一个自定义的 Spring 存储库。我有界面:

public interface RataRepositoryCustom {

        List<RataEntity> getRateFromTipoFrequenzaRimborso(String tipoFrequenzaRimborso);
            
}

其中RataEntity类是

@Entity
@Table(name = "rata")
public class RataEntity implements Serializable {

    private static final long serialVersionUID = -4278591894832763005L;

    @Id
    @Column(name = "COD_RATA")
    private Integer codRata;
    
    @Column(name = "COD_RIMBORSO")
    private String codRimborso; 
    
    @Column(name = "DATA_PROROGA")
    private String dataProroga;

    @Column(name = "PERC_CALCOLO")
    private String percCalcolo;
    
    @Column(name = "PERC_OUTSTANDING")
    private String percOutstanding;

    @Column(name = "DATA_SCADENZA")
    private Date dataScadenza;
    
    @Column(name = "IMPORTO_RATA")
    private Double importoRata; 
     
       ... getters and setters...

}

它的实施

@Repository
@Transactional(readOnly = true)
public class RateRepositoryCustomImpl implements RataRepositoryCustom {
    
    @PersistenceContext
    EntityManager entityManager;

    @Override
    public List<RataEntity> getRateFromTipoFrequenzaRimborso(String tipoFrequenzaRimborso) {
        
    StringBuilder querySql = new StringBuilder();
    querySql.append("SELECT distinct e FROM RataEntity e, RimborsoEntity r where e.codRimborso=r.codRimborso ");
    if(tipoFrequenzaRimborso.equals("Ann"))
        querySql.append("and r.freqRimborso='Annual'");
    else if (tipoFrequenzaRimborso.equals("Sem"))
        querySql.append("and r.freqRimborso='Semestral'");
    else if (tipoFrequenzaRimborso.equals("Event"))
        querySql.append("and r.freqRimborso='Ad event'");
    
    Query query =  entityManager.createQuery(querySql.toString());
    return query.getResultList();

    }

}

和以下存储库类

@Repository public interface RataRepository extends JpaRepository<RataEntity, Integer>, RataRepositoryCustom {

}

当我运行我的应用程序时,我得到这个错误:

未能创建方法公共摘要的查询java.util.Listit.aubay.PreliosPAN.repositories.RataRepositoryCustom.getRateFromTipo频率zaRimborso(java.lang.字符串)!没有找到RataEntity类型的属性getRateFromTipo频率zaRimborso!

Spring Framework似乎试图在实体中找到一个方法名为的属性。如果我在这个链接上查看官方文档

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.custom-implementations

我们有一个通用的例子,其中方法名是

void someCustomMethod(用户用户)

我在其他Entity对象上实现了相同的代码,Spring Framework可以与任何方法名一起正常工作。仅对于示例的类,我有错误,但我无法理解为什么。有什么想法吗?

共有1个答案

喻渊
2023-03-14

我解决了问题。
自定义仓库 RateRepositoryCustomImpl 的实现类名称的初始部分



与接口

RataRepositoryCustom 的名称不同

实现类的正确名称必须是

RataRepositoryCustomImpl
Regard

 类似资料:
  • 我试图实现一个自定义Spring存储库。我有接口: 实施: 和“主”存储库,扩展我的自定义存储库: 我使用的是Spring Boot,根据文档: 默认情况下,Spring Boot将启用JPA存储库支持,并查看@SpringBootApplication所在的包(及其子包)。 当我运行应用程序时,出现以下错误: 组织。springframework。数据映射。PropertyReferenceEx

  • 我正在尝试将Spring Data JDBC与MyBatis一起使用。我对使用CrudRepository提供的开箱即用的CRUD方法以及编写在MyBatis XML文件中定义的其他自定义查询感兴趣。 通过阅读jdbc.mybatis的说明,听起来我需要做的只是创建一个来实现我想要的方法(遵循“语句的名称是通过将实体类型的完全限定名与mapper连接来构造的”这一规则),并向我的添加一个方法签名。

  • 我有实体,并且我希望获得按排序的所有项,但是出现错误消息的属性start。 错误日志

  • 我有一个实体Person,它有一个属性Name。name没有被标记为实体。对于Name类,我有一个属性转换器,它通过名字和姓氏的字符串连接创建一个全名。所以对于个人实体,列名是字符串类型。 这是可行的。但现在我想扩展我的个人存储库。我想按她的姓找人。但是 或 不起作用。我得到以下例外: 我怎样才能解决这个问题?谢谢和问候 编辑:

  • 下面的代码没有给我正确的答案。 这给出; 一般来说,若给定了点的数组列表,我们如何在数组中找到特定点的索引?