그래서 나는 Comment
엔티티의 다음 매핑을 가지고 있습니다.식별자에만 액세스 할 때 지연 초기화를 방지하는 방법은 무엇입니까?
@Data
@ToString(exclude = {"user", "place"})
@Entity
public class Comment extends AbstractEntity {
@ManyToOne
private User user;
@ManyToOne
private Place place;
@Column(columnDefinition = "TEXT")
private String comment;
@Column
private Integer rating;
@Column
private Boolean approved;
}
나는이
Page<Comment> comments = commentRepository.findByApprovedIsFalseOrApprovedIsNull(pageable);
같은 Comments
를 가져 그리고 지금이
<tr th:each="comment,i : ${comments}">
<td><input name="places" th:value="${comment.id}" type="checkbox"></td>
<td th:text="${comments.number} * ${comments.size} + ${i.count}">LP1</td>
<td th:text="${comment.user.id}">1234</td>
<td th:text="${comment.place.id}">5432</td>
<td th:text="${comment.createdAt}">2014-04-10</td>
<td th:text="${comment.comment}">Lorem ipsum and more</td>
<td>Location</td>
</tr>
같은 테이블로보기로 퍼팅 문제입니다 Comment
테이블에도 불구하고 (예,하지 엔티티) user_id
및 place_id
열이 포함되어있는 경우 추가 Place
및를 가져 오는 추가 선택이 수행됩니다.관계. 실제로 엔티티의 식별자에만 액세스하고 있기 때문에 실제로는 후드 아래에 Comment
으로 숨겨져 있어야합니다. 왜 초기화가 수행 될까요? 추가 초기화 가져 오기를 생략 할 수 있습니까?
편집 :
나는 약간의 소스를 확인하신 후, 나는 BasicLazyInitializer
는 단지 내가 필요 같은 식별자를 반환 할 수있는 능력을 가지고, 발견했다,하지만 난 잘 모릅니다, 조건은 위에서 레이어에 충족해야 할 일 이 지점을 appied해라. 여기를보십시오 :
가져 오기 및 선택 속성 '@ManyToOne (fetch = FetchType.LAZY, optional = false)'을 추가 했습니까? –
@MadhusudanaReddySunnapu하지만 기본적으로 게으르며, 관계가 게으른 초기 초기화 된 문제는 내가 피하고 싶었던 것임을 나타냅니다. (이는 ID 가져 오기로 인해 잉여가되기 때문에) – Antoniossss
아래에 제안 된대로 추가 필드를 매핑하거나 조인을 지정할 수 있습니다 1에서 모든 데이터를로드해야하는 쿼리에서 가져와 사용자 및 장소에 대한 추가 쿼리를 방지합니다. –