JPA 7

converter를 만들지 않고 jpa mysql에서 json 사용하기

배경 컬럼에 json을 넣을일이 많지는 않지만 가끔 생길수도 있다. 근데 jpa에서 쓰려면 Jacson + 직렬화가 필요하다. 제네릭 converter를 사용해서 직렬화 / 역직렬화 하는 converter을 사용해도 되지만 더 간단한 방법이 있다. 일단 이거를 추가해줍니다. // json -> jpa implementation("com.vladmihalcea:hibernate-types-52:2.16.2") 엔티티 @Entity @AllArgsConstructor @NoArgsConstructor @Builder @Getter @TypeDef(name = "json", typeClass = JsonType.class). -> 이거를 추가해주고 public class Member extends BaseEn..

JPA - cascade, orphanRemoval

cascade 엔티티를 영속화할 때 연관된 엔티티도 함께 영속화하는 기능 예) 게시글과 게시글 좋아요의 관계 public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToMany(mappedBy = "board", cascade = CascadeType.ALL, orphanRemoval = true) private final List boardLikeList = new ArrayList(); .. 생략 } public class BoardLike { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Many..

JPA - proxy(프록시)

printMember(Member member) { member.getUsername(); // username만 가져오면 되는데 team 정보도 가져오면 성능상 손해 } printMemberAndTeam(Member member) { member.getTeam(); member.getUsername(); } 지연로딩, 프록시로 해결 가능 프록시 em.getReference() - 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 초기화 할 때는 sql 이 생성 안되고 아래처럼 사용 될 경우 호출함 System.out.println("findMember.username = " + findMember.getUsername()); proxy가 값을 가지고 있으면 그 proxy객체에서 반환 없으면 초..

JPA - 상속관계 매핑

상속관계 매핑 - 3가지 종류가 있음 - 조인전략, 단일 테이블 전략, 구현 클래스마다 테이블 전략 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 RDB에는 없음 @Entity @Inheritance(전략은 고를 수 있음) public abstract class Item { @Id @GeneratedValue private Long id; private String name; private int price; } @Entity public class Album extends Item { private artist; } 위의 엔티티로 예시 조인전략 조인 전략 -- 정석적인 전략 @Inheritance(strategy = InheritanceType.JOINED) //이거 없으면 그냥 한 테이블..

JPA - pageable을 이용한 paging

이런식으로 페이징이 되어있는 사이트가 많이 있다. JPA 에서 또 Spring Data jpa 프로젝트에서는 효과적으로 페이징을 처리할 수 있게 방법을 제공한다. 제가 프로젝트 하면서 사용한 코드들인데 나중에도 기회가 되면 쓰려고 정리합니다 ㅎㅎ 먼저 querydsl을 사용하지 않고 spring data jpa를 사용할 때부터 보겠습니다. spring data jpa 사용법은 https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation 여기를 봐주세요. PageRequest.of에는 page(0부터 시작) size를 적어주면 됩니다. Pageable pageable = PageReque..

jpa - 엔티티 매핑

객체와 테이블 매핑 @Entity - jpa가 관리한다. @Table 기본 생성자는 필수 ddl auto create - drop하고 생성 create-drop - create했다가 끝나면 drop한다. update. - 변경 부분만 반영한다. validate. - 기존 db와 비교해서 다르면 애러 none ****주의 개발 초기에는 create , update 테스트 서버는 update, validate 스테이징 운영서버는 validate 또는 None 필드와 칼럼 @Column(name ="", length = 10) - 유니크 조건을 여기다가 걸 수 있지만 이름을 줄 수 없으므로 @Table에 줌 => 보통 애플리케이션: memberId db: member_id => spring boot가 알아서 ..

JPA - 기본 개념과 영속성

ORM이란 object relational mapping 즉 객체 관계 매핑이다. 자바에서 데이터베이스 관계들을 객체로 설계하고 데이터베이스에서는 관계형 데이터 베이스로 설계해서 매핑시켜줌 JPA란 java persistence API의 약자 자바 진영의 ORM 표준으로 인터페이스 모음 JPA를 구현한게 Hibernate JPA 특징 ** JPA의 모든 데이터 변경은 트랜잭션 안에서 실행되어야 합니다. 엔티티 매니저 팩토리와 엔티티 메니저의 관계 엔티티 매니저 팩토리가 앤티티 매니저들을 생성해서 db 커넥션 그리고 엔티티매니저에는 영속성컨텍스트란게 존재한다. 영속성은 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할 비영속 준영속 em.detach(member) 영속 em..