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

未找到类型Entry的属性findAllEntries

班昱
2023-03-14

我不知道为什么Spring不喜欢我的代码:

我有Entry.java

@Entity
@Table(name = "entries")
public class Entry {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "text")
    private String text;
}

EntryDao.java

public interface EntryDao extends JpaRepository<Entry, Long> {
    List<Entry> findAllEntries();
}

入口服务.java

@Service
public interface EntryService {

    List<Entry> findAllEntries();

}

< code > entryserviceimpl . Java :

public class EntryServiceImpl implements EntryService {
    private EntryDao entryDao;
    private SessionFactory sessionFactory;

    @Override
    @SuppressWarnings("unchecked")
    public List<Entry> findAllEntries()  {
        Session session = this.sessionFactory.getCurrentSession();
        List<Entry> entries = session.createQuery("from entries").list();
        return entries;
    }
}

此代码给我一个错误:

org.springframework.beans.factory。BeanCreationException:创建名为“entryDao”的bean时出错:调用init方法失败;嵌套异常是org.springframework.data.map。PropertyReferenceException:找不到Entry类型的属性findAllEntries!

我不知道如何处理这个错误以及为什么会发生这个错误。

共有2个答案

巫马望
2023-03-14

正如@AbdullahWasi所说,只需使用SpringData中现有的findAll()方法即可编写代码。您可能希望在代码中放置@Transactional注释,但这取决于事务边界。

只需从你的刀中删除你的自定义方法。

public interface EntryDao extends JpaRepository<Entry, Long> {
}

并使用默认的spring数据< code>findAll

@Transactional
public class EntryServiceImpl implements EntryService {
    private EntryDao entryDao;
    private SessionFactory sessionFactory;

    @Override
    @SuppressWarnings("unchecked")
    public List<Entry> findAllEntries()  {
        return entryDao.findAll();
    }
}
巢承安
2023-03-14

您获得异常的根本原因是您违反了在Spring Data JPA中声明/创建查询的约定/规则。

Spring Data JPA的官方文档提到:

Spring Data存储库抽象的目标是显着减少为各种持久性存储实现数据访问层所需的样板代码量。

抽象的中心接口是< code>Repository,要管理您的实体,您需要声明您自己的< code>Repository接口,JPA将帮助您为这些接口创建代理实例。已经有一些基本的< code >存储库,如< code>CrudRepository或< code > PagingAndSortingRepository 来提供基本的功能,从它们的名称就可以看出,因此通过扩展这些基本的存储库,您将拥有许多基本的方法。要定义更具体的访问方法,您需要遵循JPA提供的创建查询的方法:

    < li >按照方法名称约定在接口中定义方法 < li >使用@Query批注手动定义它

对于第一种方法,查询创建的文档有详细的说明,这里有一些关键的想法:

该机制从方法中删除前缀find…By、read…By,query…By和count…By,并开始解析其余部分。引入子句可以包含其他表达式,如Distinct,以在要创建的查询上设置不同的标志。但是,第一个By用作分隔符,以指示实际条件的开始。在非常基本的层次上,您可以定义实体属性的条件,并将它们与and和Or连接起来

简单地说,JPA将解析方法名,并试图找到相关的属性来为您创建查询条件。

现在让我们看看你的代码,如果你只想检索所有的实体,你不需要定义自己的方法,已经预先定义了findAll方法,如果你想根据text内容检索实体,它应该如下所示:

Entity findByText(String text)

但是您的方法findAllEntites只是不匹配任何规则,因此JPA会向您抛出这样的错误消息

 类似资料:
  • 我有以下实体: 然后我创建我的存储库: 但我一开始就收到: 未找到MyTable类型的属性getCountOf 我到底做错了什么?

  • 我最近开始使用ReactiveCouchbase Repository(sping-data-Couchbase-3.0.0。M2,Spring-引导-启动器-父-2.0.0。M2)在我们的一个项目中。 我从这里引用了未发布的文档并设置了项目,但我得到了以下错误。 以下是关于设置我的项目的相关信息。 @Maven @爪哇 现在,我确实经历了这个和这个,但在这里,我没有在DummyRepositor

  • 您好,我正在建立一个动物园微服务,包括动物、员工、客户和价格表。我的动物微服务可以工作,但在我的员工微服务中,我遇到了一个错误,即没有为类型“EmployeeModel”找到属性“name”。在问这个问题之前,我已经在网上搜索了几个小时,还有一些类似的问题。我在模型中没有“名字”employee_name,我只是感到困惑,不知道如何修复它。任何指导/建议/信息将不胜感激:)第一次发布,所以我希望我

  • 我正试图借助java应用程序中的spring数据来使用neo4j。目前我面临一个奇怪的问题。以下是场景。 现在,当我尝试获取所有具有指向B的RequestedTo关系的UserNode时,我得到以下异常 在这里,我使用Spring中提供的GraphRespository接口对neo4j执行以下查询。 另外,当我在neoclipse中启动此查询时,我可以看到结果中的UserNode上没有“type”

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

  • 我已经搜索了很多页,但没有找到答案,所以我粘贴了整个代码。我正在测试测试类,并得到这样的错误:“起因:org.springframework.beans.factory.BeanCreation异常:创建名为“userRepository”的bean时出错:初始化方法调用失败;嵌套异常java.lang.IllegalArgument异常:未能为方法公共抽象创建查询org.home.mysyste