30%
61,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
queryDsl Cannot find symbol이라고 뜹니다
이렇게 찾을 수 없다고 뜨는데 이유를 모르겠습니다 또한 위에 있는 코드로 했을 경우에는 QOrder 등 파일이 생성이 되는데 밑에있는 코드로 했을 경우는 generated 파일 자체가 생성이 안되고 완료했다는 코드만 뜹니다ㅠ
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
api를 생성하는 근본적인 이유에 대해서 궁금합니다.
1탄부터 해서 2탄까지 쭉 잘 듣고 있습니다!! 설명을 너무 잘 해주셔서 감사합니다!! 한 가지 궁금한 게 있다면 API를 만드는 근본적인 이유가 뭔지 잘 모르겠다는 것인데요... 1탄에서는 기능을 구현하는 것을 보여주셨는데 아직 개발을 공부한지 얼마 안된 저의 입장에서는 그냥 기능이 잘 구현이 되면 끝이 아닌가 하는 생각이 들더라구요... 그래서 그 이후의 api를 만드는 작업에서 근본적으로 왜 api를 만드는지에 대해서 의문을 가지다 보니 수업에 잘 집중이 안되는 것도 있었습니다.. 그래서 기능 구현을 하고 나서 api를 왜 만드는지 설명이 듣고 싶어서 이렇게 질문을 남깁니다..
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
json parse error
=========================================[질문 내용]영한님 안녕하세요! 강의 감사히 잘 듣고있습니다. 이 부분은 자바 공부가 부족한것 같아서라는 생각이 들지만 검색으로 딱 답을 얻기어려워 질문을 남겨봅니다 ㅠㅠ 강의에서 CreateMemberResponse 내부 static 클래스 만드실 때 처럼, CreateMemberRequest도 똑같이 생성자를 만들고 post 요청을 날렸더니 아래와 같은 에러가 떴습니다! 메세지를 읽어보니 생성자 관련한 에러인 것 같아 CreateMemberRequest 에 만든 생성자를 지우니 정상적으로 동작이 잘 되는 것을 확인할 수 있었습니다..ㅜㅜ 여기서 질문인데요... CreateMemberResponse / CreateMemberRequest 모두 static을 선언한 내부 클래스인건 동일한데 왜 CreateMemberRequest에 만든 생성자 때문에 에러가 나는 걸까요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Could not find querydslplugin 문제 (해결완료)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 아래 처럼 에러가 뜹니다.Could not find gradle.plugin.com.ewerk.gradle.plugins:querydslplugin:1.0.10 로딩이 안되네요. buildscript { dependencies { classpath("gradle.plugin.com.ewerk.gradle.plugins:querydslplugin:1.0.10") }}plugins { id 'org.springframework.boot' version '2.6.1' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java'}apply plugin: "com.ewerk.gradle.plugins.querydsl"
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
컬럼조회 질문
강의 진행후 토이프로젝트 진행중에 질문이 있어 여쭤봅니다.제가 하고싶은 조회는- 로그인한 멤버가 (memberId 조인)- 소속한 팀의 (teamId 조인)- 모든 대화방(Room)과 각 대화방에 참여한 모든 멤버(Room_member)를 조회 하고싶습니다. public List<Room> findRoomsByTeamId(Long memberId, Long teamId) { return em.createQuery("select distinct r from Room r" + " join fetch r.team t" + " join fetch r.roomMembers rm" + " join fetch rm.member m" + " where t.id = :teamId" + " and m.id = :memberId" ,Room.class ) .setParameter("teamId", teamId) .setParameter("memberId", memberId) .getResultList();} 조인을 이렇게 실행했는데, 문제점이 memberId가 걸려있기 때문에, 대화방에 소속된 다른 멤버가 조회가 되지않습니다. (본인만 조회됨)memberId를 조인하지 않으면, 대화방에 소속된 멤버가 모두 나오지만 본인이 속하지 않은 대화방도 모두 조회 됩니다... 제가 생각하는 해결방안으로는 서브쿼리를 사용하는것인데,, JPA로도 가능한가요?아니면 다른 해결 방법이 있을까요? ㅁㄴㅁㄴㅇㅁㄴ
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
스프링 데이터 JPA 와 EntityManager
안녕하세요 영한님 강의 잘 들었습니다! 제가 Data JPA랑 entity Manager 같이 쓰려고 public interface WorkerRepository extends JpaRepository<Worker, Long>,CustomRepository{} 위와 같이 CustomRepository 인터페이스를 만들고 구현체 클래스에서 Entity Manager를 주입받고 썼는데 에러가 나서 제가 진행하는 방법이 잘 못 되었는지 질문 드립니다..
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
API 성공 실패 처리
API에서 객체를 만들어서 반환할때 만약 실패하는 경우는 어떻게 처리해야하나요?즉, 로그인 API에서입력받은 이메일과 패스워드로 스프링단에서 조회한 후 일하하는 멤버가 존재하면 로그인 처리를 해주면되고Response 객체에 제가 리턴값으로 member_id만 반환해준다 했을때.컨트롤러에서 로그인 처리에서 분기를 어떻게 나눠처리하나요?제가 생각되는 방안은1. member_id가 null이면 실패이다 => null일 경우 아예 오류가 떠버리더라구요.2. 새로운 객체를 만들어 리턴 즉 컨트롤러단에서 존재하지않으면 새로운 FailResponse객체를 만들어서 반환3. JsonResult 사용인터넷에서 찾아본건데, 객체를 또한번 JsonResult라는 객체에 담아서 제이슨으로 전환JsonResult에는 성공,실패 여부와 메시지, 그리고 리스폰스객체가 담김해당 강의를 수강하면서 궁금한점이 생긴부분입니다. 실무에서는 보통 어떻게 처리하는지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
다대다 컬럼조회 질문
해당강의까지 진행하고 실습해보고 있습니다. Member <-> Team 이 다대다 관계여서 이관계를 풀기위해 Member -< TeamMember >- Team 1 : N : 1. 로 풀어줬습니다. teamId 를 url로 받아서 해당 팀에 소속된 멤버를 조회하고 싶습니다. ApiController @GetMapping("/members/{teamId}")public List<MemberDto> findByTeamMembers( @PathVariable Long teamId) { List<Member> members = memberService.findByTeamMembers(teamId); List<MemberDto> result = members.stream() .map(m -> new MemberDto(m)) .collect(Collectors.toList()); return result;} MemberDTO & TeamMemberDto @Datapublic class MemberDto { private Long memberId; private String name; private MemberStatus status; private String avatar; private List<TeamMemberDto> teamMembers; public MemberDto(Member member) { memberId = member.getId(); name = member.getName(); status = member.getStatus(); avatar = member.getAvatar(); teamMembers = member.getTeamMembers() .stream().map(teamMember -> new TeamMemberDto(teamMember)) .collect(Collectors.toList()); } @Data static class TeamMemberDto { private String teamName; private Long hostId; public TeamMemberDto(TeamMember teamMember) { teamName = teamMember.getTeam().getName(); hostId = teamMember.getTeam().getId(); } }} Repository public List<Member> findByTeamMembers(Long teamId) { return em.createQuery("select distinct m from Member m" + " join fetch m.teamMembers tm" + " join fetch tm.team t" + " where t.id = :teamId",Member.class) .setParameter("teamId", teamId) .getResultList();} 제이슨 결과 { "memberId": 4, "name": "홍길동", "status": "LOGIN", "avatar": null, "teamMembers": [ { "teamName": "길동1팀", } ] } Json 결과에 대해 제가 궁금한것은 홍길동이라는 사람의 팀네임을 뽑기위해 teamMembers -> teamName 으로 나오는것은 비효율 적이라 생각합니다즉 제가 원하는 결과는 { "memberId": 4, "name": "홍길동", "status": "LOGIN", "avatar": null, "teamName": "길동1팀", ] } 혹시 방법이 있나요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
findAllByDto_flat 네이밍 문의드립니다.
안녕하세요 항상 좋은 강의 고맙습니다 ^^ 강의 내용중에 함수명을 findAllByDto_flat 만드셨는데 findAllByDtoFlat 이 아니고 _(언더바)가 사용돼 문의 드립니다. 실무에서 보통 저렇게 카멜과 언더바를 혼용해서도 사용하나요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
API를 사용하는 이유?
API가 뭔지는 알겠습니다. "객체(DTO)에 있는 값들을 JSON으로 반환하는 컨트롤러" 근데 이것을 왜 쓰는지는 감이 안옵니다.만약 조회의 결과를 JSON으로 클라이언트에 반환한다 치면,조회값이 엄청 많으니까 JSON으로 "축약"해서 보낸다는 느낌으로 이해 했는데 맞나요..? 클라이언트에서 서버로 왜 JSON으로 보내는지, 반대의 경우는 왜 그러는지 감이 안잡힙니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
계층형 아키텍처에서 spring data jpa를 사용한 JPQL 사용 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요. 강의를 보면서 개인 프로젝트에 적용을 조금씩 해보고있는데요 현재 프로젝트는 레이어드 아키텍처로 구성되어있습니다. domain 계층 repository 인터페이스 제공 infrastructure 계층 domain 계층을 의존 repository 인터페이스 구현 원래는 도메인 계층에서 JpaRepository를 상속받은 인터페이스(spring data jpa)를 사용하다가 인프라 계층에서 도메인 계층에 있는 Repository를 구현해야 하는 경우에는 어떻게 해야할지 고민입니다. domain계층에서 repository를 인터페이스로 만들고 infrastructure 계층에서 jpql을 사용해 domain계층의 repository를 구현 해야하는 경우 어떻게 해야할까요? infra계층에서 domain에 있는 인터페이스를 구현을 하는 경우 JpaRepository에 있는 메서드를 모두 다 구현하는 경우가 생기는데.. spring data jpa 강의를 아직 듣지는 못했지만 방향을 잡아주 실 수 있을까요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
Entity 저장에 관해 문의드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 영항님! 좋은 강의 잘 듣고 있습니다. 강의를 듣고 토이 프로젝트를 진행하는 와중에 궁금한 점이 생겨 질문글을 올리게 되었습니다. 저는 Board라는 Entity를 다음과 같이 선언하였습니다. @Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "board_id")private Long id;private String title;private String topic;private String content;@Enumerated(EnumType.STRING)private StudyState studyState;@Enumerated(EnumType.STRING)private RecruitState recruitState;private Long headCount;@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "member_id")private Member member; 그리고 저는 프론트에서부터 전달받은 Dto로 실제 Board Entity를 저장하려고 했습니다. 그래서 저는 Dto로 부터 Entity를 만들 수 있는 메소드 toEntity를 다음과 같이 구성하였습니다. @Data@NoArgsConstructor@AllArgsConstructorpublic class BoardCreateRequestDto { private Long memberId; private String title; private String topic; private String content; private Long headCount; private StudyState studyState; private RecruitState recruitState; public Board toEntity() { return Board.builder() .title(this.title) .topic(this.topic) .content(this.content) .studyState(this.studyState) .recruitState(this.recruitState) .headCount(this.headCount) .member(new Member(this.memberId)) .build(); }} Board board = boardRepository.save(requestDto.toEntity()); 실제로 저장을 할 시에 Board Entity에는 Member를 넣어 저장하나, 실제 DB에서는 Board 객체에서의 Id만을 외래키로 저장하기에 다음과 같이 저장해도 무방하다는 것을 알게 되었습니다. 저는 이 방법이 MemberId를 통해 Member 객체를 찾지 않고 저장할 수 있기에 쿼리 1번을 덜 날릴 수 있어 비용적인 측면에서 조금의 이득이 생긴다고 생각하여 다음과 같이 구성해보았습니다. 이러한 방법이 문제가 있는지 궁금합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@OneToMany에 관한 질문
안녕하세요 영한님. 질문이 있어 이렇게 글을 남깁니다. public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "user") private List<Order> orders; public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "orderId") private Long orderId; 코드가 이렇게 다른 케이스로 2가지가 있는데 위에는 위에는 일대다를 나타내는 @OneToMany를 사용하였고 밑에는 그냥 @Column을 사용했습니다. 만약 아래와 같은 요구조건이 들어왔다고 가정해보겠습니다. "사용자의 주문중 현재 Active 상태인 것을 조회하라" 이 경우 각각은 public List<Order> getActiveOrder () { // 모종의 방법으로 user 찾음 List<Order> orders = user.getOrders(); // 여기서 Order 테이블에 쿼리 나감 List<Order> result = new ArrayList<>(); for (Order order : orders) { if (order.getStatus()) == ACTIVE { result.add(order); } } return result;} public List<Order> getActiveOrder () {//모종의 방법으로 user 찾음 Long orderId = user.getOrderId(); return orderRepository.findOrderByStatusAndId(ACTIVE, user.getOrderId());} 이렇게 될거 같은데 위는 user의 모든 Order를 찾은 다음 결과를 도출해내니까 아래의 경우보다 훨씬 느릴거 같은데 이 경우엔 @OneToMany 를 안쓰는 게 더 좋은가요??
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@JoinColumn 질문
안녕하세요 영한님. 좋은 강의 덕분에 이해가 정말 잘 되고 있습니다!! 다름이 아니라 @JoinColumn에 궁금한게 있어 질문드립니다. 예를들어 아래의 두개의 코드를 비교 해보면 위에는 @JoinColumn 을 사용하였고 밑에는 그냥 @Column을 사용하였다는 차이점이 있습니다. 물론 어플리케이션 딴에서 그럴일은 거의 없겠지만 제가 무조건 order를 사용하는 케이스가 orderId를 조회하는거 밖에 없다면 위의 코드보다 아래의 코드가 더 좋은 것일까요? 왜냐하면 orderId를 찾기위해선 위에 코드는 user.getOrder().getId() 와 같이 코드를 짜고 이때 DB에 Order에 대한 쿼리가 또 나가기 때문에 하지만 밑에 코드는 그냥 user.getOrderId만 하고 따로 쿼리가 안나가기 때문에 밑에 코드가 더 이 경우엔 효율 적일까요? public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne private Order order; public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "orderId") private Long orderId;
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO 의 Entity 변경에 대한 위치에 대해서 문의드려요
안녕하세요 . 김영한 강사님 , 강좌 초반을 학습하다가 궁굼한 부분이 생겨서 문의드립니다. 강의에서 생성 메소드를 만들때 전달받은 DTO 를 Entity 로 변환하는 로직을 Controller에서 수행하였는데 , DTO -> Entity , Entity -> DTO 에 대한 책임을 Controller에 위임 하시는 편인가요 ? (저의 경우는 그 책임을 Service layer 에 두고 modelmapper 를 사용하고 있습니다.) @PostMapping("/api/v2/members")public CreateMemberResponse saveMemberV2(@RequestBody @Valid CreateMemberRequest request) { Member member = new Member(); member.setName(request.getName()); Long id = memberService.join(member); return new CreateMemberResponse(id);}
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
@DynamicInsert와 @DynamicUpdate
1. JPA에서 Entity 컬럼에 null이 아닌 DDL에서 정의한 디폴트값을 넣고 싶습니다. Entity 컬럼에 디폴트 값을 설정하는 방법이 있을 것이고요. 또는 @DynamicInsert 설정해 두면 insert 시에 DDL에서 정의한 디폴트 값도 잘 들어갈 것이라고 생각했습니다. @DynamicInsert 는 모든 entity 들에 설정할 경우 무슨 문제점이 있을까요? 2. v1 API 에서 v2로 가면서 업데이트 필드가 추가되었습니다. 이때 v1과 v2의 입력 폼이 같다고 가정할때 v1으로는 추가된 필드가 null로 들어오게 됩니다. 이 경우 v2으로는 정상 업데이트가 되는데 v1으로는 기존 필드가 null로 업데이트 되는 문제 발생합니다. 이에 대한 해결책으로 입력 폼에 추가된 업데이트된 필드에 Default 값을 할당하는 방법이 있을꺼 같은데요. 위 방법 말고 @DynamicUpdate 로도 입력값이 null인 경우 해당 필드를 업데이트 하지 않도록 해결이 가능할 것 같습니다. @DynamicUpdate 사용시 주의해야 할 점이 있을까요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
DTO변환 관련 질문이 있습니다.
안녕하세요 엔티티에서 DTO로 변환하는 과정에서 궁금한 것이 있어 질문을 드립니다. 예를들어, Post와 Category엔티티가 있고 이것은 (Post) 1 : N (Category)양방향 매핑을 하고 있다고 했을 때, Post엔티티를 조회하여 DTO로 변환을 해보았습니다. 우선 Post조회 코드입니다. 그리고 Post와 Category의 Dto입니다. 이렇게 했더니 StackOverFlow 에러가 떴는데, 저는 PostDto에서 생성자로 만들지 않고 public static chagePostDto(Post post){} 이런식으로 static 메서드를 만들어서 처리를 해보았는데, 이런식으로 처리해도 괜찮을까요? 좀 더 좋은 방법이 있을까요? 감사합니다.
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 테스트코드 관련해서 질문드립니다!
영한님 안녕하세요 강의 잘 듣고 프로젝트 진행하고 있습니다. 테스트코드를 더 잘 작성하고 싶어서 여러 자료를 찾아보고 있습니다. 영한님의 강의 수강하기 이전에는 테스트코드 작성 방법에 대해 공부한적은 없습니다. 좀더 효율적인 테스트코드를 작성하는 방법을 설명해놓은 책 / 강의를 추천해주실 수 있나요?
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
안녕하세요 XToOne관계 질문있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 안녕하세요 강의 잘 듣고 있습니다. 수업 듣고 조금 더 변형해서 공부하고 있는데요, 하다가 궁금한 것이 생겨서 질문드립니다. 만약 현재 조회하려는 엔티티와 그 엔티티의 연관관계가 toOne관계라면 어떻게 조회해야 최적화가 될 수 있을까요? 그러니까 예로 Product라는 엔티티와 Seller라는 엔티티가 ManyToOne관계를 가지고 있는 경우(한명의 Seller가 여러 개의 Product를 쇼핑몰에 등록할 수 있다는 비즈니스 로직인 경우) 에도 패치 조인을 사용해야 하나요? 물론 김영한 님의 강의에도 이러한 연관관계를 조회하는 로직이 있었지만 그때는 ( 현재 제가 변형한 예시에서는) 모든 Product들을 조회하는 경우였고, 저는 하나의 findById()로 하나의 Product만을 조회하고 싶습니다. 하여 생각해 본 것이 아래와 같은 쿼리입니다. 그런데 위와 같은 쿼리를 사용하면 DBMS 내에서 Join이 먼저 되서 하나의 Product 조회를 위해 너무 지나치게 많은 join이 실행되는 것으로 아는데.. 쿼리는 한번 나가겠지만 너무 비효율적인 것이 아닌가 싶어서 잘 모르겠습니다. 긴 질문 읽어 주셔어 감사합니다!!!
- 미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
질문 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private List<Team> teamList; @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "ADDR_ID", referencedColumnName = "ADDR_ID") private List<Addr> addrInfo; } 위와 같은 Entity가 있습니다. 두개의 Entity와 연관관계가 맵핑되어있는 Eentity인데요 List<Member> memberList = memberDao.findAllById(id); List<String> teamList = teamList.stream().map(Member::getTeamList).flatMap(List::stream).map(Team::getTeamName).collect(Collectors.toList()); 위의 코드를 실행하면 간혹가다 아래의 에러가 나옵니다.. Message JpaSystemException: Found shared references to a collection: com.co.test.model.Member.addrInfo; nested exception is org.hibernate.HibernateException: Found shared references to a collection: com.co.test.model.addrInfo Date 2021-11-04 14:08:20 StackTrace org.springframework.orm.jpa.JpaSystemException: Found shared references to a collection: com.co.test.model.Member.addrInfo; nested exception is org.hibernate.HibernateException: Found shared references to a collection: com.co.test.model.Member.addrInfo 위의 에러를 찾아보니 참조하고 있는 객체를 복사해서 사용할려고 하면 나온다고 하는데... 복사할려고 시도조차 한적이 없는 코드인데 왜 가끔 나오는걸까요?? 일주일동안 찾아도 이유를 모르겠더라구요...