Автоконфигурация загрузки Spring не работает должным образом с spring-data-jpa - PullRequest
0 голосов
/ 14 марта 2019

У меня есть крошечное приложение для весенней загрузки (это просто доказательство концепции), работающее с базой данных H2 в памяти и использующее spring-data-jpa для обработки персистентности.Он состоит из REST API, который позволяет обрабатывать посты и комментарии, поэтому вы можете создавать и извлекать посты и комментарии к этим постам.Приложение имеет две сущности JPA Post и Comment, и проблема, с которой я сталкиваюсь, заключается в том, что после добавления сущности Comment приложение не запускается, но до добавления Comment, когда у меня только что был Post объект, приложение запущено и тесты пройдены.Кажется, что весенняя загрузка не может автоматически настроить JPA.

Это ошибка, которую я получаю:

[ОШИБКА] shouldReturnNullForNotExistingPost (com.devskiller.tasks.blog.service).PostServiceTest) Прошедшее время: 0,001 с <<< ОШИБКА! </p>

java.lang.IllegalStateException: Не удалось загрузить ApplicationContext

Причина: org.springframework.beans.factory.BeanCreationException: Ошибка созданияbean-компонент с именем entityManagerFactory, определенный в ресурсе пути к классу [org / springframework / boot / autoconfigure / orm / jpa / HibernateJpaConfiguration.class]: сбой вызова метода init;вложенным исключением является javax.persistence.PersistenceException: [PersistenceUnit: default] Невозможно построить Hibernate SessionFactory;вложенным исключением является org.hibernate.MappingException: не удалось определить тип для: com.devskiller.tasks.blog.model.Post, в таблице: комментарий, для столбцов: [org.hibernate.mapping.Column (post)]

Причина: javax.persistence.PersistenceException: [PersistenceUnit: default] Невозможно построить Hibernate SessionFactory;Вложенное исключение: org.hibernate.MappingException: Не удалось определить тип для: com.devskiller.tasks.blog.model.Post, в таблице: комментарий, для столбцов: [org.hibernate.mapping.Column (post)]

Причина: org.hibernate.MappingException: Не удалось определить тип для: com.devskiller.tasks.blog.model.Post, в таблице: комментарий, для столбцов: [org.hibernate.mapping.Column (post)]

Post объект:

@Entity
public class Post {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @Column(length = 4096)
    private String content;

    private LocalDateTime creationDate;    

    // Getters and setters

Comment объект:

@Entity
public class Comment {
    @Id
    @GeneratedValue
    private Long id;

    private String author;

    private String content;

    private Post post;

    // Getters and setters

Решение: После добавления @OneToOneв аннотации к Comment.post поле ошибка исчезает.Но почему?Я думал, что согласно спецификации JPA нет необходимости добавлять эту аннотацию, чтобы создать однонаправленную связь между двумя объектами с конфигурацией по умолчанию.Не так ли?

1 Ответ

0 голосов
/ 14 марта 2019
@GeneratedValue(strategy = GenerationType.AUTO)

@GeneratedValue(strategy = GenerationType.IDENTITY)

@GeneratedValue(strategy = GenerationType.SEQUENCE)

@GeneratedValue(strategy = GenerationType.TABLE)

@GeneratedValue(strategy = GenerationType.TABLE, generator = "book_generator")
@TableGenerator(name="book_generator", table="id_generator", schema="bookstore")

Попробуйте изменить стратегию генерации на любой из вышеперечисленных типов.Похоже, вы не указали какие-либо способы для структуры для определения стратегии генерации.

Подробную информацию см. По ссылке ниже https://thoughts -on-java.org / jpa-generate-primary-keys /

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