좀 엉뚱한 질문일수도 있습니다만 궁금해서 질문드립니다. 연관관계의 주인이라는 개념에서 주인이 아닌쪽에는 mappedBy 로 지정한다. 고 설명을 해 주셨잖아요. 그런데 OneToMany 양방향연관관계에서 주인이 아닌쪽에서 mappedBy 로 지정할 수 있으면 좋을 듯 한데 왜 spec에서는 지원하지 않는 것일까요? 그래서 강사님도 이건 야메로 되는거라면서...@JoinColumn(insertable=false, updatable=false) 로 하면 된다고 말씀주셨습니다만 이해는 갑니다만 spec 에서 @ManyToOne 에도 mappedBy를 사용할 수 있게 했으면 일관되게 정의할 수 있을텐데 하는 생각이 들었습니다. @ManyToOne 에는 왜 mappedBy 속성이 없는지 아시면 알려주세요.
안녕하세요. 기본편 수강마치고 강의 듣는 중에 의문점이 있어 질문드립니다. 기본편의 페치조인의 한계 강의에서는 "페치조인의 대상에는 별칭을 줄 수 없다." 고 하셨는데 지금 예제는 별칭을 포함하고 있어서요. (o.member m 과 o.delivery d) 제가 검색조건을 추가해서 테스트해보니 정상적으로 쿼리수행이 되었습니다. 아래는 제가 테스트해본 코드입니다. public List<Order> findAllWithMemberDelivery(OrderSearch orderSearch) { return em.createQuery("select o from Order o " + "join fetch o.member m " + "join fetch o.delivery d " + "where (:status is null or o.status = :status) " + "and (:name is null or m.name like :name)", Order.class) .setParameter("status", orderSearch.getOrderStatus()) .setParameter("name", orderSearch.getMemberName()) .getResultList(); } 그리고 기본편의 강의에서는 페치조인에 별칭을 주는것의 위험성도 설명해주셨는데요. 지금같이 검색조건을 주는 경우에는 페치조인에 별칭을 줄 수 밖에 없는게 아닌지 궁금합니다. 기본편 강의를 다시 보니 OneToMany 에 대해서만 페치조인 별칭이 위험한 것으로 이해됩니다. 지금예제의 Order와 Member 관계처럼 ManyToOne 에서는 문제가 되지 않는 것인지.. 제가 이해한게 맞는지 확인 부탁드리겠습니다.
안녕하세요! @EntityGraph 는 기본적으로 left join을 하는 것 같은데 혹시 inner 나 right 조인도 @EntityGraph 에서 가능한지 궁금합니다. 아니면 이때는 jpql을 작성해야 할까요? 그리고 늦은 시간에 질문이라 죄송하고 😭 늘 좋은 강의 정말 감사드립니다! 😄
Database "C:/Users/dev/test" not found, either pre-create it or allow remote database creation (not recommended in secure environments) [90149-200] 90149/90149 연결을 클릭하면 위와 같은 에러 메세지가 뜨는데 검색을 해봐도 해결이 잘 되지가 않습니다. (Windows 환경입니다.)
안녕하세요. 질문 하나 드리겠습니다. "2. 연관관계 없는 엔티티 외부 조인"의 예시로 "회원과 팀" 을 들어주셨는데요. 예제에서는 회원과 팀간에는 ManyToOne, OneToMany로 연관관계가 맺어진것 같아서요. 여기서 "연관관계 가 없다" 가 어떤의미로 말씀하신건지 궁금합니다.
선생님의 강의를 보면서 정말 실무에서 몰랐으면 고생했을 내용을 많이 알게되어서 도움이 많이되었습니다.^^ OSIV같은 성능 최적화를 위한 설정 부분에 대해서 알게 되어서 너무나도 기쁩니다. 사실 다름이아니고 전부터 궁금했던 부분인데 @Transactional(read only =true) 로 설정하면 읽기 전용으로 설정이되어서 CRUD에서 R을 제외한 나머지 작업은 안되는걸로 알고있는데 정확하게 어떻게 동작하는지 메커니즘이 궁금합니다. 제가 찾아봤을때는 read only = true로 설정하면 트랜잭션 커밋 직전에 영속컨텍스트에서 플러시를 호출하지 않는 걸로아는데 ... 이게 정확한 정보인지 궁금합니다.
A라는 엔터티와 B라는 엔터티가 있고, 이것의 관계가 1:N이라는 관계에 있다고 가정했을 때 repository를 생성할 때 , ARepository만 만들거나, BRepository를 만들거나, ARepositry 와 BRepository를 만드는 경우가 있을 거 같은대요. 혹시 각각의 경우에 대해서 알려주실 수 있을까요? 전 무의적으로 각각의 Entity에대해서 Repository를 만드는 것 같아서요 ㅎㅎ;
강의를 역시나 재미나게 보고 있습니다 ㅎㅎ 가끔 블로그를 보면 entity에 Serializable을 붙이는 경우가 있는데 이것에 대한 설명 부탁드립니다. 제가 아는 한에서 Serializable은 객체를 다른 서버로(ip가 다른) 보낼 때 객체로는 보낼 수 없어서 스트림으로 만들기 위해 Serializable을 사용하는 것으로 이해하고 있는데. 보통 dto로 매핍을 받으니 entity 객체가 다른 곳으로 이동할 일이 옶다고 보거든요. 오히려 서로 다른 ip로 되어 있는 서버에 보내기 위해서는 dto객체를 serializable로 만드는게 맞지않을까 생각합니다
Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: hellojpa.Member at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:803) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:784) at hellojpa.JpaMain.main(JpaMain.java:17) 강좌를 따라가며 동일하게 진행하다가, 해당 오류가 발생하고 있습니다. member 객체를 ID 없이 저장하려고 하면 아이디가 없다는 에러메세지가 아니라 객체를 찾을수 없다고 나오고 있습니다. 책을 찾아보면 엔티티 클래스를 자동으로 인식을 못하는 경우 <class>jpabook.start.Member</class>를 지정해주면 된다고 하셨더라구요. 강좌에서는 이런 언급을 안하시던데 따로 엔티티를 탐색하는 방안이 잇을까요?
order 엔티티를 조회했을때 프록시 초기화를 통해서 컬렉션 과 나머지 엔티티들을 조회하는것을 알겠는데 postman에서 조회화면결과에서 TotalPrice 컬럼은 어떻게 나오는건가요? 아무리봐도 Order 클래스파일에는 public int getTotalPrice() 메소드로 정의된거 말고는 없는데 이 부분이 궁금해서 질문드립니다.
안녕하세요. 강의 잘 듣고있습니다. 질문은, 회사에서 Query를 작성하다보면 코드테이블을 여러번 join 하는 경우가 허다한데요. a join code 처럼 a 테이블의 특정 코드에 대한 코드값을 읽어오고자 할 경우, a 테이블에서 code 테이블쪽으로 driving이 걸리는 컬럼은 대부분 pk가 아닐텐데요. 이럴 경우 어떤식으로 해결을 해야할까요? join을 통해서 이래저래 방법을 찾아보았으나 pk와 fk 관계가 아니면 오류가 나네요. 몇일동안 테스트는 하는데 딱히 방법이 보이지않습니다. 내부적으로 메인테이블에서는 단순코드만 관리하고 description 자체를 코드테이블에서 읽어오는 방식이다 보니 상기방식의 작업이 상당히 많은 편입니다. 그럼 조언부탁드립니다. 미리 감사드립니다.
Member를 Team을 추가 할 때 public void setTeam (Team team){ this.team = team team.getMembers().add(this) } 위와 같이 연관관계 편의 메서드를 만드셨는데, 제거 할 때도 위와 같이 양쪽에서 동시에 제거하는 메소드를 만드시는지 궁금합니다. 제가 실습중인 코드에서는 delete : /team/{team_id}/member/{member_id} 로 api를 호출하면 아래 메소드가 호출됩니다. public void removeMember (Long team_id, Long member_id){ Team team = validateTeam(team_id); //team 이 실제로 있는지 확인 Member member = validateMember(member_id); //member 가 실제로 있는지 확인 if(team.equals(member.getTeam())){ //의문점 team.getTeam().remove(member); memberRepository.deleteById(member.getId) } } Team에 Member를 추가 할 때와 같이 Member를 제거 할 때도 양쪽에서 같이 제거해야하는지 그리고 entity 에서 remove 관련 편의메소드를 만들어야하는지 궁금합니다 .
영한님 안녕하세요~ 오늘도 또 하나의 질문을 들고 왔습니다. 예전 MyBatis 방식에서는 보통 수정 처리의 경우, 업데이트 문 한번으로 처리가 가능했는데요. (내가 수정하고자 하는 일부 항목들만 정의된 Update SQL 문 작성) JPA 방식에서는 Find 를 먼저 하지 않고 바로 업데이트 하기에는 어려움이 있는 듯 합니다. 예를 들어 Member 객체에 패스워드가 포함되어 있는데 패스워드만 수정을 해야 되는 경우라면 MyBatis 방식에서는 별도의 select 없이 패스워드만 update 를 하면 됐었는데 JPA 에서는 Find 를 통해 객체에 초기셋팅을 한번 한 뒤에 @DynamicUpdate 활용해야 Password 만 변경되는 SQL 을 수행시킬 수가 있는 거 같습니다. 즉, Update 를 위해서는 항상 Select 절이 따라 붙어야 한다는 건데 JPA 장점을 위해 이런 부분은 감수해야 되는 부분이라고 생각해야 되겠죠??
영한님 안녕하세요. 강좌들으면서 실무에서 직접 해보고 있는데 풀리지 않는 오류가 하나 등장했습니다. ManyToOne 단방향 맵핑한 영역이 있습니다. (MemberWebUser / MemberCompany) (다만, PK 가 아닌 Unique 한 다른 필드로 Join 을 설정했고요..) 저장까지는 문제없이 잘 됩니다. (FK 도 원하는 필드로 저장됐구요) 그런데 이후 QueryDsl 로 두 개를 조인해서 Many 쪽의 객체만 가져오는 Select Repository 를 아래와 같이 작성했는데 .... 해당 리파지토리 실행 시점에 ClassCastException : MemberCompany cannot be cast to java.io.Serializle at org.hibernate.type.ManyToOneType.hydate(ManyToOneType.java) 에러가 발생합니다. 원인을 모르겠어요 ㅜ