어플리케이션이 스프링 부트를 기반으로 할 때 정의 된 엔티티 그래프는 고려되지 않습니다. 반대로 JUnit 테스트 중에는 모든 것이 잘 작동합니다.스프링 데이터 JPA 엔티티 그래프가 스프링 부트와 함께 작동하지 않습니다.
도메인은 매우 간단합니다. 책과 그 카테고리 (많은 관계가 많음).
도서 분류 :
@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;
카테고리 클래스 : REST 제어기
가@Component
@Repository
public interface BookJpaRepository extends JpaRepository<Book, Long> {
@Override
@EntityGraph(value = "Book.summary", type = EntityGraph.EntityGraphType.FETCH)
List<Book> findAll(); }
용도 :
@RequestMapping("/books")
@ResponseBody
public List<Book> getBooksSummary() {
return bookJpaRepository.findAll();
}
,369 생성 엔티티 그래프를 사용하는 방법에
@Entity
public class Category {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long category_id;
private String name;
@ManyToMany(mappedBy = "categories")
private List<Book> books;
JPA 저장소
봄 부팅 (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());
}
어떤 제안을 어떻게 응용 프로그램이 봄 부팅 실행하면 작업 개체 그래프를 얻는 방법?
그렇다면 NamedEntityGraph의 문서 인 https : //docs.oracle.com/javaee/7/tutorial/persistence-entitygraphs002.htm –
질문은 엔티티 그래프를 작동시키는 방법과 Spring에서 응용 프로그램을 사용하는 이유입니다. 부팅이 무시하고 있습니다. –
이것이 도움이 될 것 같아요 : http://stackoverflow.com/questions/26291143/spest-data-jpa-jpaspecificationexecutor-entitygraph –