작성
·
605
0
현재
두엔터티 사이에서
User와 History가 1 : N의 관계를 가집니다.
다만 History값에서 user는 null인경우도있기때문에
조회시에는 left outer join을 사용하기 위해서 아래와 같이 하였습니다.
public class InoutHistory {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(insertable = false,updatable=false)
private String mac;
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn(name = "mac",referencedColumnName = "mac")
private User user;
@EntityGraph(attributePaths = {"user"})
Page<InoutHistory> findAll(Pageable pageable);
이 경우 제가 원하느대로
findAll을 호출시 left outer join문을 잘 만들어서 history에 따른 user들을 값을 가져옵니다. (user는 null인경우도 가능) -> @JoinColumn을 사용하는 이유
다만, 제가 inouthistoryEntity를 save할때 mac값이 insert되지 않아 값이 null로 들어가는 문제가 생깁니다. mac값을 insert할수 있고 left outer join으로 호출할수 있는 방안이 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요. @JoinColumn을 사용하는 이유는 관계형 데이터베이스에서 연관 테이블 간의 연결을 설정하기 위해 사용됩니다. @JoinColumn의 insertable = false 속성은 insert 시 해당 열에 값을 삽입하지 않도록 설정합니다. 따라서 mac 값이 insert되지 않는 문제가 발생하는 것은 정상적인 동작입니다.
left outer join으로 호출할 수 있는 방법은 이미 사용되고 있는 것 같습니다. 그리고 user 값이 null인 경우도 가능하다고 하셨으니, 이 부분에서 문제가 발생하지 않는다면 현재 구현이 올바른 것으로 보입니다.
만약 mac 값을 insert할 수 있어야 하고, left outer join으로 호출해야 한다면 다음과 같이 해볼 수 있습니다:
이 방법을 사용하면 mac 값을 insert할 수 있으면서, 조회 시에도 left outer join을 사용할 수 있을 것입니다. 하지만 EAGER 로딩은 성능에 영향을 미칠 수 있으므로, 신중하게 사용해야 합니다.
만약 이 방법이 동작하지 않거나 다른 문제가 발생한다면, 해당 이슈에 대해 더 자세히 알려주시면 더 도움을 드릴 수 있을 것입니다.