inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 데이터 JPA

스프링 데이터 JPA 7. EntityGraph

SELFJOIN 구성에 관해 질문 드립니다.

206

Choi HwaSeong

작성한 질문수 2

0

안녕하세요 두번째 질문 드립니다.

시스템 개발하다 보면 필요한 코드들을 한곳에 모아 놓은 테이블로 만들어 관리 하고 계층 구조를 Tree 형태로 유지 하기 위해 self-join 방식을 사용하곤 했습니다.

jsp에서도 같은 기능을 하는 객체를 만들어 사용하고 싶은데.. 쉽지 않아 질문 드립니다.

이것 저것 옵션을 붙여 봤는데.. 생각 같이 안나와서 이게 가능한 접근 인지도 잘 모르겠네요..

코드는 아래와 같습니다.

이렇게 하고 호출하면 루프를 돌다 에라가 나는데..

상호참조 할때 처럼 옵션을 줘도 별반 차이가 없는것 같고..

답답해서 질문 드립니다.

Domain

 public class CodeTree {

@Id

@SequenceGenerator(name = "seq_codetree", sequenceName = "seq_codetree", allocationSize = 1, initialValue = 100)

@GeneratedValue(generator = "seq_codetree")

private Long codeTree_;

private String codeTreeName;

private int codeTreeOrder;

@Lob

@Type(type = "org.hibernate.type.TextType")

private String codeTreeNote;

@ManyToOne()

@JoinColumn(name = "codeTreeUp")

private CodeTree codeTreeUp;

@OneToMany(mappedBy = "codeTreeUp")

private List<CodeTree> codeTreeMember;

private String codeTreeValue1;

private String codeTreeValue2;

private LocalDateTime createDate;

private LocalDateTime modifyDate;

}

Controller

   @Autowired

private CodeTreeRepository codeTreeRepository;

@RequestMapping(value = "/code", method = RequestMethod.GET)

public ResponseEntity codeAll() {

return new ResponseEntity<>(codeTreeRepository.findAll(), HttpStatus.OK);

}

감사합니다...

spring JPA java

답변 2

0

Choi HwaSeong

답변 감사합니다
위의 코드에 값을 입력하면서 테스트 해 보았습니다.
결과는 나왔는데.. 원하는 모양은 아니었습니다.
List 를 보면 하위 멤버를 포함하는 구조를 생각했는데.. 아래 보시는 것처럼 역으로 표현되는 문제가 있습니다.

최상위 
  -- 하위 1
 -- 하위 2

어떻게 하면 위와 같은 결과를 받을 수 있을까요?
다시한번 바쁜 시간중에 답변 주신것 감사드립니다.

[
{
"id": 1,
"codeTreeName": "최상위",
"codeTreeOrder": 0,
"codeTreeNote": null,
"codeTreeUp": null,
"codeTreeMember": null,
"codeTreeValue1": null,
"codeTreeValue2": null,
"createDate": null,
"modifyDate": null
},
{
"id": 2,
"codeTreeName": "하위",
"codeTreeOrder": 0,
"codeTreeNote": null,
"codeTreeUp": {
"id": 1,
"codeTreeName": "최상위",
"codeTreeOrder": 0,
"codeTreeNote": null,
"codeTreeUp": null,
"codeTreeMember": null,
"codeTreeValue1": null,
"codeTreeValue2": null,
"createDate": null,
"modifyDate": null
},
"codeTreeMember": null,
"codeTreeValue1": null,
"codeTreeValue2": null,
"createDate": null,
"modifyDate": null
},
{
"id": 3,
"codeTreeName": "하위2",
"codeTreeOrder": 0,
"codeTreeNote": null,
"codeTreeUp": {
"id": 1,
"codeTreeName": "최상위",
"codeTreeOrder": 0,
"codeTreeNote": null,
"codeTreeUp": null,
"codeTreeMember": null,
"codeTreeValue1": null,
"codeTreeValue2": null,
"createDate": null,
"modifyDate": null
},
"codeTreeMember": null,
"codeTreeValue1": null,
"codeTreeValue2": null,
"createDate": null,
"modifyDate": null
}
]

0

백기선

JPA 맵핑을 주제로 다룬 강좌도 아니었는데 어떤 에러인지 메시지를 보여주지 않으시면 도와드리기가 어렵습니다.

제가 실제로 위와 비슷한 설정으로 테스트를 만들어 본 결과 저 설정 만으로는 아무 이상이 없어 보입니다. 아마도 CodeTree위에 롬복 애노테이션을 사용하신거 같은데요. 거기서 StackOverFlow를 발생시켰을 가능성도 있을거 같은데 해당 코드도 역시 보이질 않으니 도와드리기가 어렵네요. 아래 코드는 제가 실행 해본 코드이며 정상 동작하는지 테스트 코드로 확인해 보았습니다.

@Entity

@Getter @Setter @EqualsAndHashCode(of = "id")

@Builder @NoArgsConstructor @AllArgsConstructor

public class CodeTree {

@Id

@GeneratedValue

private Long id;

private String codeTreeName;

private int codeTreeOrder;

private String codeTreeNote;

@ManyToOne

private CodeTree codeTreeUp;

@OneToMany(mappedBy = "codeTreeUp")

private List<CodeTree> codeTreeMember;

private String codeTreeValue1;

private String codeTreeValue2;

private LocalDateTime createDate;

private LocalDateTime modifyDate;

}

public interface CodeTreeRepository extends JpaRepository<CodeTree, Long> {

}

@RunWith(SpringRunner.class)

@DataJpaTest

public class CodeTreeRepositoryTest {

@Autowired

CodeTreeRepository codeTreeRepository;

@Test

public void findAll() {

codeTreeRepository.findAll();

}

}

spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴

0

533

1

<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문

0

392

1

comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?

0

407

1

@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?

0

451

0

PersistenceContext 관련 질문드립니다.

0

335

1

지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다

0

338

1

transaction 구간이 길어질 경우의 처리방법 문의드립니다.

0

905

1

docker postgres

0

293

1

Multiple DataSource 사용 시 transaction 관련 질문 드립니다.

0

2908

1

entity 중 null이 아닌 필드만 update 할 방법이 있을까요?

0

1191

1

Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?

0

385

1

엔티티를 상속받는 DTO가 일반적인가요?

1

1847

1

커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.

0

339

1

연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.

0

566

4

EntityManager 주입시 Annotation관련 질문드립니다.

0

565

1

클래스 기반 프로젝션 사용 관련 질문

0

560

1

save 메서드 질문드립니다.

0

258

1

복잡한 통계쿼리도 JPA로 가능한가요?

2

5593

1

find 와 get의 차이가 무엇인가요?

0

890

1

실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?

0

999

1

\dt Did not find any relations.

0

481

1

소스코드는 어디서 볼 수 있을까요?

1

287

1

table 생성과 select 문에 대한 질문

0

174

1

스프링 데이터 RepositoryTest 관련 질문

0

2173

2