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

Spring crudepository方法findAll()返回一个空列表

程承恩
2023-03-14

所以,我的问题在于title-crudepository方法findAll()返回一个空列表。我重写了Crud的方法,因为它返回的是iterable而不是list。

我尝试使用JpaRepository而不是crudepository(当时我没有覆盖findAll()方法),但得到了相同的结果。

我的代码:

Event.java

@Data
@Entity
@NoArgsConstructor
public class Event{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable=false)
    private String name;
    
    @Column(nullable=false)
    private LocalDateTime time;

    @ManyToOne
    @JoinColumn
    private City city;

}

城市JAVA

@Data
@Entity
@NoArgsConstructor
public class City {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(nullable=false)
    private Long code;
    
    @Column(nullable=false)
    private String name;
    
        @OneToMany(mappedBy = "city", cascade = CascadeType.ALL)
        private Set<Event> events;
    }

CityRepository.java

    @Repository
    public interface CityRepository extends CrudRepository<City, Long> {
    
    @Override
    List<City> findAll();
}

事件Controller.java

@Controller
@RequestMapping
public class EventsController {

    @Autowired
    static CityRepository cityRepository;

    public static List<Event> eventList = new ArrayList<>();
    
    @RequestMapping
    public String eventEntry(Model model) {
        
        model.addAttribute("event", new Event());
        model.addAttribute("cities", cityRepository.findAll());
        
        return "eventEntry";
    }
}

事件条目。html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Event entry</title>
</head>
<body>

    <h3>New event</h3>
    
    <form method="POST" th:object="${event}">
    
        <div class="form-group">
            <label for="city">City: </label>
            <select th:field="*{city}">
                <option value="" >Choose a city</option>
                <option th:each="city : ${cities}" th:value="${city}" th:text="${city}"></option>
            </select>
            <span class="validation-error" th:if="${#fields.hasErrors('city')}" th:errors="*{city}">City Error</span>
        </div>
    
        <div class="form-group">
            <label for="name">Name: </label>
            <input type="text" th:field="*{name}" />
            <span class="validation-error" th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</span>
        </div>
        
        <div class="form-group">
            <label for="time">Time: </label>
            <input type="datetime-local" th:field="*{time}" />
            <span class="validation-error" th:if="${#fields.hasErrors('time')}" th:errors="*{time}">Time Error</span>
        </div>
                    
        <div class="form-group">
            <input type="submit" th:value="Save">
        </div>
        
    </form>
</body>

我正在使用一个嵌入式H2数据库,其中有一个用于将数据填充到数据库中的data.sql文件(我没有schema.sql文件,因为表是使用注释创建的)。当查看H2数据库控制台并使用SELECT*from CITY时,我得到了城市的列表。

我在EventController类的这一行得到了一个NullPointerExctivemodel.add属性("城市",cityRepository.findAll());有人能解释一下为什么吗?

共有1个答案

郭麒
2023-03-14

删除了存储库前面的静态声明,现在可以正常工作了

 类似资料:
  • 正如您在这里看到的,基本的程序流程是将一个param传递到这条路由,它用param设置的值创建一个新的用户对象(当前只有“role”,但我希望它会随着时间的推移而改变) 然后,findAll方法查找role=角色参数值的所有记录; 换句话说,我的SQL查询将如下所示: 在role=“admin”处运行此查询当前返回1条记录,这是预期的。 但是上面java代码中的findAll(示例)返回0条记录。

  • 我试图使用JPA findAll获取所有记录。如果我在终端中运行相同的查询,结果会得到一些行,但不是通过JPA。我在stackoverflow上尝试了其他答案,但都不起作用。我尝试添加公共getter和setter,尽管我假设这是通过注释完成的。 型号类别: 服务等级: 编辑:添加存储库代码:

  • 问题内容: 我正在尝试编写一个用于与last.fm API进行交互的小脚本。 我有一点使用的经验,但是以前使用它的方式似乎无效,而是返回一个空列表。 我删除了API密钥,因为我不知道它到底应该有多私密,并举了一个示例,说明了我在该位置接收的XML。 与API交互的类: 调用的get_now_playing方法: 我收到的xml样本: 问题答案: 问题在于, 如果给定标签名称,则仅搜索元素的直接后代

  • 我正在使用Spring Data JPA: 使用Spring 4.3.7。释放并Hibernate5.2.9。最终的 当我使用findAll查询时,List返回包含空值。 实体: 注:请注意,问题并不是来自lombock,我已经用getter和setter进行了测试。 仓库: 服务:

  • 我试图获取一个列表从数据库和findAll()返回空列表。我有多个jpa存储库,但只有一个不工作。这是代码: 这就是实体: 当我调用product类别epository.findAll()时,它返回空列表,因此我在数据库中有许多条目。谢谢你的帮助!

  • 我为此使用了一个服务类,但为了最小的可重复示例而删除了它。目前findAll()正在返回一个空数组,而它应该从h2返回一个带有员工实体json的数组。我仍然不清楚Spring如何将数据处理到h2数据库中,所以我想这可能是我的问题的根源。 控制器: 存储库: 实体: 数据sql: schema.sql: