У меня есть крошечное приложение для весенней загрузки (это просто доказательство концепции), работающее с базой данных 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 нет необходимости добавлять эту аннотацию, чтобы создать однонаправленную связь между двумя объектами с конфигурацией по умолчанию.Не так ли?