백엔드/JPA 썸네일형 리스트형 JPA 프록시와 영속성 전이 프록시에 대해 em.find()와 em.getReference() 의 차이는 프록시를 사용하고 안하고이다. find를 호출하면 select가 데이터베이스에 바로 날아가서 가져오는거고 getReference는 영속성 컨텍스트가 해당 객체에 대한 참조값만 들고있게 된다. 해당 객체에 접근하기 전까지는 select문이 나가지 않는다. getId()를 하면 select문이 나가지 않는데 이유는 처음에 em.getReference()에서 인자로 id를 줬기때문에 영속성 컨텍스트가 알고있는 값이라 select문을 실행하지 않는다. getUsername() 할때에서야 비로소 select문이 나간다. 프록시의 특징을 정리하면 다음과 같다. 프록시 객체는 처음 한번만 초기화 된다. 객체에 접근해서 select문이 나갈때.. 더보기 JPA 엔티티 매핑2 일대다 단방향 매핑 이전 정리글에서는 단방향 매핑은 보통 연관관계의 주인이 n쪽이므로 다대일 단방향 매핑에 대해서만 정리했다. 하지만 일대다 단방향도 가능하다고 한다. 우선 일대다에서는 객체의 데이터가 변경되면 디비에서 해당 엔티티의 테이블이 아닌 상대방 쪽의 테이블에 데이터가 수정된다. 무슨말인지 예시를 통해 보면. 만약 Team의 members에 새로운 멤버를 하나 추가한다고 하면 디비에서는 Team 테이블이 아닌 Member 테이블에 값이 추가되거나 변경된다는 말이다. @Entity @Getter @Setter public class Book { @Id @GeneratedValue private Long id; private String name; } @Entity @Getter @Setter pu.. 더보기 JPA 엔티티 매핑1 엔티티와 PK JPA를 사용해서 테이블과 매핑하고 싶은 클래스는 @Entity 어노테이션을 달아줘야한다. 테이블과 매핑을 할거니 pk가 필요한데 @Id 어노테이션을 필드위에 달아줌으로써 이 필드가 pk이다 라는 것을 jpa에게 알려줘야한다. @GeneratedValue 라고 하면 jpa가 알아서 id를 할당해준다. 여기서 JPA의 영속성을 통해서 id 값을 확인해보면 JPA가 알아서 id 값을 세팅해주었으므로 p.getId() 를 출력해보면 어떤 id 가 할당되었는지 확인이 가능하다. id 값을 생성하는 전략은 총 4가지가 있다. 수업에서는 SEQUENCE 만 알려주셨는데 나머지는 궁금해서 찾아봤다. 1. SEQUENCE 수업에서 알려주셨던 방법 이렇게 auto increment를 해주면서 id값이 정해.. 더보기 스프링부트 테스트 영속성과 JPQL 보호되어 있는 글입니다. 더보기 JPA와 영속성 https://www.inflearn.com/course/ORM-JPA-Basic 을 공부하며 정리한 글입니다. JPA의 등장배경 JPA는 sql을 하나하나 작성하지 않고도 데이터베이스에 CRUD 작업이 가능하도록 하고 무엇보다 객체적인 설계와 데이터베이스 모델링의 차이를 없애주기 위해서 등장했다. 이 JPA를 사용함으로써 객체를 컬렉션에 저장하듯이 저장하는 것이 가능하다. 객체적인 설계와 DB 모델링의 차이라고 하면 객체에서는 다른 객체에 대한 참조값을 지니게 되지만 디비 세상에서는 그런게 없다... 다른 테이블의 외래키를 들고 있을 뿐이다. 데이터 베이스 모델링대로 코딩하면 다음과 같이 된다는 말이다. //객체 모델링 class Student { private School school; private.. 더보기 이전 1 2 다음