월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
소스코드 깃헙 주소있나요?
자바 ORM 표준 JPA 프로그래밍 - 기본편소스코드 깃헙 주소있습니까?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
일대다 단방향은 무조건 피해야 하나요?
일대다 단방향 매핑에서 다음의 두가지 단점이 있다고 말씀해 주셨습니다.추가적인 update 쿼리의 실행엔티티가 관리하는 외래 키가 다른 테이블에 있음그런데 일대다 단방향 매핑을 맺을 때 updatable=false와 nullable=false를 추가하면 update 쿼리 없이 한 번에 insert 쿼리만 나가는 것을 확인했습니다.@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) @JoinColumn(name = "parent_id", nullable = false, updatable = false) private List<Child> children = new ArrayList<>();물론 부모 자식간 관계가 변하지 않고 라이프사이클이 완전 동일한 경우에만 활용할 수 있을 듯 합니다.그럼 update 쿼리가 추가적으로 나가는 것은 해결한 셈인데 이런 경우에도 엔티티가 관리하는 외래키가 다른 테이블에 있다는 단점에 의해 다대일 양방향을 맺어줘야 할까요? 복잡한 실무에서는 그 패러다임 불일치가 많은 영향을 주나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql
1. flush2. 디비로 쿼리날림3. 쿼리결과가 영속성컨텍스트에 있으면 버리고 없으면 저장 . update : 업데이트 시킨 엔티티를 반환하진 않기때문에. 그 숫자만 반환하기때문에 3번과정을 거치진 않는다 1+2과정만 거친다insert : 쿼리dsl같은경우는 insert대신에 persist를 사용한다. select : 1,2,3과정을 거친다제가 설명한게 맞나요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
기존 DB의 테이블과 jpa로 만들어진 테이블과 관계 맺기
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이미 실무에서 사용중인 데이터베이스가 있습니다. 이 DB 안에는 기 생성된 테이블들이 있구요. JPA를 활용해 기존 DB에 접근해 필요한 테이블들을 추가하고 엔티티 매핑하는 작업들은 잘 되었는데요. 문제는 기존 DB의 "User" 테이블과 제가 새로 만든 테이블의 관계를 맺어주는 것이 가능한건가 해서요. [tb_user] <- 기존에 존재하던 테이블 (아래는 스키마)user_id : String : "S00001"name : String : "홍길동"age : int : 30[tb_user_history] <- 새로 등록한 테이블@Entity @Data @Table(name="tb_user_history") public class UserHistory { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name="user_history_id") private Long id; //연관 관계를 맺어주는게 가능한가요?????? private String user_id; }제 프로그램상에서 생성하고 관리하는 테이블이라면 @ManyToOne, @JoinColumn을 이용해서 조인과 외래키 생성 작업을 해줄수있는데 지금과 같은 경우에서는 어떤식으로 가능할까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 타입은 비교 지원하지 않는다는데 왜 비교가 되는걸까요
책 399페이지를 보면 비교를 지원하지 않는다고 되어있는데 제코드에서는 비교연산이 되는 것 같아요.. 왜그러는걸까요 제가 잘못이해한건가요?
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
'스프링에서 엔티티 매니저와 영속성 컨텍스트가 N:1'의 의미 질문 드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 비슷한 질문 있지만 해결 되지 않음3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]'스프링에서 엔티티 매니저와 영속성 컨텍스트가 N:1'의 의미 질문 드립니다.강의 4분 1초쯤 스프링에서는 엔티티 매니저와 영속성 컨텍스트가 N:1 이라는 장표가 있는데 아래와 같이 이해했습니다.N개의 EntityManager 객체들은 동일한 PersistenceContext 객체를 참조하고 있음 (싱글톤)위 내용을 확인 해보고자 본 강의의 소스파일(jpashop-v20210728)을 인텔리제이에서 디버그 실행한 상태에서 다수의 HTTP 요청을 보내서, HTTP 요청마다 생성된 다수의 EntityManager 객체가 하나의 PersistenceContext 객체를 참조하고 있는지 확인했습니다. 확인 결과 EntityManager 객체마다 각각 다른 PersistenceContext 객체를 참조하고 있었습니다. 5번의 HTTP 요청을 보내서 5개의 엔티티매니저 객체와 영속성 컨텍스트 객체가 생성됐습니다. 위 내용만 본다면, 스프링부트 프로젝트인데 J2SE 환경과 마찬가지로 엔티티 매니저와 영속성 컨텍스트가 1:1로 생성되는것으로 보여서, 제가 위 장표를 잘못 이해한것 같아 질문 드립니다.감사합니다~
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql
select t from Team t where t IN (select m.team from Member m where m.age >= 20)select t from Team t where t IN (select t2 From Team t2 join t2.members m2 where m2.age >= 20)-> 결과 같게 나오는데 같은 쿼리인게 맞을까요...?-> 근데 이게 서브쿼리의 결과는 다른데 in을썼기때문에 같은결과가 나오는거일까요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
join fetch
n + 1 문제를 해결하기 위해 join fetch를 써야 하는걸로 배웠는데 inner join으로 해석이 되는 join fetch를 혹시 한 쿼리 안에서 여러번 쓸때 어떨때는 inner join으로 해석하고 어떨때는 outer join으로 해석하게 설정을 할 수 있나요? (inner join과 outer join을 쓰고 싶은데 join fetch를 여러번 쓸경우 inner join으로만 해석이 됩니다.)
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
jpql의 객체지향 쿼리라는 말이 궁금합니다
기본적으로 find를 통한 DB조회를 하여도 각 테이블의 컬럼에 있는 값을 가져오는것인데jpql을 사용해도 똑같이 DB의 테이블내 컬럼값을 가져오는것이 아닌지 의문입니다.또한 jpql이 객체지향 쿼리라고 불리는것은 테이블을 기반으로 DB조회를 하는게 아닌 객체를 기반으로 DB조회를 하기때문인가요?만약 맞다면 모든 DB테이블이 객체로 이루어져 있어야하기때문에 JPQL 단독사용이 불가능한지도 궁금합니다 감사합니다
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
INSERT 문이 동작을 안합니다.
[질문 내용]안녕하세요.강의 10:15초에서부터 tx.begin으로 db 트랜젝션을 생성하여 insert 쿼리를 전달하는데 영한님처럼 terminal 창에 에러도 안나오고, h2 db에 insert도 되지 않습니다.JPA Main class를 실행시켰습니다.System.out.println("1111"); 을 실행시켜도 터미널에 나오지 않습니다......termianl창 출력 내용 :"C:\Program Files\Java\jdk1.8.0_291\bin\java.exe" "-Process finished with exit code 0
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
39분 때 em.clear()에 관해서 질문이 있습니다.
강의에서 39분 쯤에 em.detach(), em.close()는 왜 프록시가 초기화가 안되는지 이해했습니다.근데 em.clear()는 단순히 영속성 컨텍스트를 비우는 것으로 아는데원래 프록시가 영속성 컨텍스트에 초기화 요청을 하고 없으면 DB에 조회를 해서 실제 Entity를 target으로 가져오는 것으로 이해를 했는데 em.clear()로 비워져있다고 refMember.getUsername()이 왜 안되는 것인지 이해가 가질 않았습니다. 그래서 생각해본 결과 질문이 있습니다.Q. 혹시 프록시 초기화를 요청하는 과정이 em.getReference()로 조회를 하면 그때 이미 프록시 객체가 진짜 객체 대신에 영속성 컨텍스트에 보관되고 뒤에 refMember.getUsername()이나 기타 다른 초기화 요청이 올 때 영속성 컨텍스트에서 DB로 조회해서 실제 객체를 프록시 내부로 들이는 것인가요...?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
임베디드 컬렉션 값 조회 jpql시 오류
public void 임베디드값조회(){ List list = em.createQuery("select m.addressList from Member m").getResultList(); for (Object o : list) { System.out.println(o); } }다음과 같은 오류가 뜹니다 not an entity [select m.addressList from jpaStudy.ex.entity.Member m]근데 m.addressList가 엔티티는 당연히 아니잖아요?왜 저 문장에 오류가 있는건가요? addresslist는 강의에 나온 address의 list버전입니다.
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
값 타입 컬렉션의 제약사항
Address address1 = new Address(null, "2"); Address address2 = new Address("3", "4"); Address address3 = new Address("3", "4"); List<Address> addressList = new ArrayList<>(); addressList.add(address1); addressList.add(address2); addressList.add(address3); Member member = new Member(); member.setAddressList(null); em.persist(member); //변경 em.flush(); address1 = new Address("213", "!23"); addressList.remove(0); addressList.add(address1);컬럼에 null을 입력할 수 없다는데.. 입력해도 테스트를 통과해요 제가 어떤부분을 잘못알고있는건가요?같은값을 중복해서 저장할 수 없다는데 2번째 3번째 줄을 보면 잘 저장하고 있지 않나요..?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
generatedvalue선택하고 setter하기
generatedvalue로 id값이 생성됐는데 전 그걸까먹고 id값을 setting해줬어요그랬더니 detached entity passed to perist 라는 오류가떴어요준영속엔티티를 영속화시키려고해서 발생하는오류잖아요?왜 이런 오류가뜨는걸까요? id생성전략은 sequence예요sequence는 다음과 같이 동작해요<<persist 를 호출하면 sequence 를 가져옵니다.가져온 Sequence 를 id 에 할당하고 (영속성 상태), transaction 이 commit 될 때, insert 쿼리를 날립니다.>>근데 이러면 제가 set을 해도 새로운 id에 덮어씌여져야하는거아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
idclass관련 질문
@Entity @Getter @AllArgsConstructor @NoArgsConstructor @IdClass(ChildId.class) public class IdenChild { @Id @ManyToOne @JoinColumn(name = "parent_id") public Parent parent; @Id private Long child_id; //private ChildId childId; Property of @IdClass not found in entity jpaStudy.ex.entity.IdenChild: child_id private String name; }@AllArgsConstructor @Getter @NoArgsConstructor public class ChildId implements Serializable { public Long parent; public Long child_id; @Override public int hashCode() { return Objects.hash(parent, child_id); } @Override public boolean equals(Object obj) { if(obj==this) return true; else{ if(obj==null || obj.getClass()!= this.getClass()) return false; ChildId c = (ChildId) obj; return parent.equals(c.parent) && child_id.equals(c.child_id); } } } jpa 책 259p에있는 내용이에요 강의내용엔 없는것같아서 질문을 드려도될지 모르겠네요..1. 결국 Parent타입인데 어떻게 id 어노테이션을 선언할 수 있는지 궁금해요2. idclass가 하는일을 정확히 잘 모르겠어요ChildId.class에 있는 필드들을 다 가져와요childid에있는 필드명과 동일한 child의 필드들은 id를 중복선언할 수 있게 돼요 < 이런일을 하게 되나요?어떻게 Parent타입과 String타입을 매핑할 수 있게 되는건가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
maven이 안됩니다.. 도움 부탁드립니다.
무직이라 가지고 있는 돈 큰 맘 먹고 책과 인강까지 구입했는데 첫 시작부터 막힙니다. 3~4시간동안했는데 안되니까 많이 속상하네요.. 도움 부탁드립니다...하...
- 해결됨자바 ORM 표준 JPA 프로그래밍 - 기본편
notnull을 붙여야하는 이유
int와 같은 원시타입에 null을 입력할 수 없잖아요그래서 nullable = false를 추가하는게 안전하대요근데 전 왜 그게 안전한건지 모르겠어요만약에 에러가 터졌을때 저는 에러내용을 보고 null을 넣어서 에러가 난것을 파악할 수 있을거예요근데 그게 nullable=false인데 null을 넣어서 에러가 난것인지, int와 같은 원시타입에 null을 넣어서 에러가 난것인지에 따라 차이가 있을까요? 에러출력내용은 비슷하게 뜰텐데요..ㅜㅜ
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
transactional이 붙은 메서드의 마지막 쿼리는 날아가지 않는다
@Transactioanl이 붙은 메서드의 마지막 쿼리는 날아가지 않아요@Commit까지 추가해야 마지막쿼리가 출력이되더라구요그 이유가뭔가요..? 마지막 쿼리까지 다 날리고 나서 롤백을 시켜야 논리적으로 맞는 것 같은데..1. flush()메서드 호출2. 엔티티와 스냅샷비교3. 업데이트 쿼리 생성 후 쓰기지연 sql저장소로 보냄4. 디비에 flush5. 디비에 commit4번에서 쿼리가 발생하고 5번에서 롤백이 일어나야하는거아닌가요?
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
IDENTITY - 트랜잭션을 지원하는 쓰기지연
JPA책의 135P를 보면IDENTITY는 트랜잭션을 지원하는 쓰기지연이 안된다고 했는데 save를 제외한 update, delete등은 동작하지않나요?SAVE일때는 디비에저장해야 식별자를 구할수있으니까 그랬던거고 UPDATE는 이미 식별자를 알고있잖아요아래와같이 테스트를 해봤을때도 update문이 가장 마지막에 출력이 됩니다.@Test @Commit @Transactional public void Parent_Child(){ Member member = Member.builder().name("김길동").build(); em.persist(member); System.out.println("-====="); em.flush(); em.clear(); Member member1 = em.find(Member.class, member.getId()); member1.setName("이름바꿈"); System.out.println("===="); }
- 미해결자바 ORM 표준 JPA 프로그래밍 - 기본편
@Entity적용시 제약사항이 필요한 이유
@Entity적용시-기본생성자는 필수- final클래스, enum,interface,inner클래스에는 사용할 수 없음- 저장할필드에 final을 사용하면안된다-> 이런 제약조건이 붙는 이유는 뭔가요?