Определенный граф объекта не учитывается, когда приложение основано на Spring Boot. Напротив, все работает отлично во время тестов JUnit.Spring Data Графики объектов JPA не работают с Spring Boot
Домен довольно прост: книги и их категории (отношение многих ко многим). Класс
Книги:
@Entity
@NamedEntityGraph(name = "Book.summary",
attributeNodes = { @NamedAttributeNode("book_id"), @NamedAttributeNode("title")})
public class Book {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long book_id;
private String title;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "BOOK_CATEGORY",
joinColumns = @JoinColumn(name = "book_id", referencedColumnName = "book_id"),
inverseJoinColumns = @JoinColumn(name = "category_id", referencedColumnName = "category_id"))
private List<Category> categories;
Категория Класс:
@Entity
public class Category {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long category_id;
private String name;
@ManyToMany(mappedBy = "categories")
private List<Book> books;
JPA хранилище с помощью метода, который использует созданные сущности графа:
@Component
@Repository
public interface BookJpaRepository extends JpaRepository<Book, Long> {
@Override
@EntityGraph(value = "Book.summary", type = EntityGraph.EntityGraphType.FETCH)
List<Book> findAll(); }
Использование в контроллере REST:
@RequestMapping("/books")
@ResponseBody
public List<Book> getBooksSummary() {
return bookJpaRepository.findAll();
}
После запуска Spring Boot (mvn spring-boot: run) и навигации по http://localhost:8080/books отображаются книги, но с их соответствующими категориями (и исключение выбрано из-за бесконечной рекурсии: книги -> категории -> книги -> категории ->. ..).
Тот же самый код в тесте (работает с SpringJUnit4ClassRunner) работает должным образом, и граф объектов правильно распознается. Например, код ниже не отображаются категории, потому что, как ожидается, есть ленивая инициализация:
@Test
public void testEntityGraph() {
List<Book> all = bookJpaRepository.findAll();
System.out.println(all.get(0).getCategories());
}
Любые предложения, как получить объектные графики работы, когда приложение работает на Spring ботинке?
Итак, в чем вопрос? Здесь находится документ NamedEntityGraph, https: //docs.oracle.com/javaee/7/tutorial/persistence-entitygraphs002.htm –
Вопрос в том, как заставить диаграммы сущностей работать и почему приложение на Spring Boot игнорирует их. –
Я думаю, что это может быть полезно: http://stackoverflow.com/questions/26291143/spring-data-jpa-jpaspecificationexecutor-entitygraph –