Метод Spring CrudRepository findAll () возвращает пустой список - PullRequest
0 голосов
/ 28 мая 2019

Итак, моя проблема в названии - метод crudrepository findAll() возвращает пустой список.Я переопределил метод Круда, потому что он возвращал итератор вместо списка.

Я попытался использовать JpaRepository вместо CrudRepository (тогда я не переопределил метод 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;

}

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();
}

EventsController.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";
}
}

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 я получаю список городов.

Я получаю NullPointerException по этой строке из класса EventController: model.addAttribute("cities", cityRepository.findAll()); Может кто-нибудь объяснить, почему

1 Ответ

0 голосов
/ 28 мая 2019

удалено объявление static перед хранилищем, теперь оно работает нормально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...