본문 바로가기

Spring/Spring Data JPA

(15)
jpa app 운영 배포 전략 jpa app 운영 배포 전략 jpa로 앱을 만들고 백엔드 서버를 운영 할 때 db에 컬럼이 추가 되는 경우가 있습니다. jpa같은 경우는 서버가 뜰 때 db하고 entity하고 매핑을 한 다음에 뜹니다. 예를들면 entity에 phone이라는 필드가 있지만 db에는 없는 경우는 매핑이 되지 않아서 서버가 뜨지 않습니다. 그래서 jpa에는 hibernate.ddl-auto에 update라는 옵션이 있는데 prod에는 보통 update는 해놓지 않고 validate로 해놓습니다. 이 옵션을 update로 해놓고 수정한 서버를 재부팅 하면 entity하고 db의 field와 비교를 해서 db의 field에 alter를 해서 컬럼을 추가합니다. 왠지 이야기만 들어도 문제가 생길 것 같지 않으신가요? 컬럼이 추..
json data jpa를 이용해 db에 넣기 .feat naver blog search api 거기서 bloggername만 뽑아서 SearchResult table에 넣기1. string을 JsonNode로 mapping하기2. jpa domain mapping하기- @Entity, @Id
jpa에서 복수키 만들기(key 2개), 복수키를 사용할 경우 길이 문제 JPA에서 복수키 만들기@IdClass(OhlcvHour.OhlcvHourKey.class) public class OhlcvHour { @Id private String currencyPair; @Id private LocalDateTime timeToHours; @EqualsAndHashCode @Embeddable static class OhlcvHourKey implements Serializable { @Column(columnDefinition = "varchar(10)") private String currencyPair; @Column(name = "TIME_TO_HOURS", nullable = false) private LocalDateTime timeToHours; } }복수키를 만들..
jpa 강좌 주제 영속성 컨텍스트란?영속성 컨텍스트를 쓰는 이유준영속성이란?method querydb와 mapping하는법ddl-auto 옵션에 따라 작동하는 방법join하는 방법. 1:1, 1:N, N:N@Join을 위한 domain 설계- match와 team id를 예제로기존에 있는 table을 jpa로index잡는법slow query는 어떻게 해결할 것인가?캐싱(caching)은 어떻게 할 것인가?query dsl
Spring Data Jpa - mysql LocalDateTime은 timestamp로, BigDecimal은 decimal mapping하기 jpa로 mysql을 쓸 때 mapping을 아래와 같이 하였다. timestamp로 mapping하기 @Column(nullable = false, name = "TIME_TO_12HOURS", columnDefinition = "TIMESTAMP(3)") private LocalDateTime timeTo12Hours; decimal로 mapping하기@Column(nullable = false, precision = 36, scale = 18) private BigDecimal open;BigDecimal은 그냥 mapping하면 decimal로 mapping된다. 1234567891011121314151617181920212223242526272829303132333435public class O..
Spring Data Jpa에서 LocalDateTime이용해서 자동으로 createdAt만들기 Spring Data Jpa에서 LocalDateTime이용해서 자동으로 createdAt만들기 1234567891011121314151617181920212223242526272829303132import lombok.Data;import javax.persistence.*;import java.time.LocalDateTime; @Data@Entitypublic class Salary { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private long userId; private String userName; private double salary; private LocalDateTime createdAt; public..
@SpringBootTest와 @DataJpaTest 차이점 @SpringBootTest와 @DataJpaTest 차이점Spring Application(스프링 어플리케이션)은 ApplicationContext이다. 스프링의 기본 컨셉이 ApplicationContext에 Bean(Object)들을 미리 로드 해놓고 사용하는 컨셉이기 때문에 이걸 로딩하는것도 시간이 꽤 걸린다. 특히 테스트를 계속 돌리면서 개발할때는 한번 올려버리는게 아니고 계속 올려야 하니까 한줄 수정 하고 결과를 보기 까지 시간이 올래 걸리면 지친다.그래서 몇가지 구분을 해놓은게 있다.결론부터 이야기 하면 @DataJpaTest는 @Component를 스캔하지않는다.그래서 @Component붙혀놓은 Class를 함께 사용하려면 @SpringBootTest를 사용하면 된다. @DataJpaTes..
IntelliJ + Gradle로 Spring Data Jpa @ManyToOne 양방향 Mapping하기 Spring Data Jpa @ManyToOne 양방향 Mapping하기 Spring Data Jpa는 굉장히 괜찮은 프레임웍이다. 기능이 많고 유연한데 그만큼 제약이 많고 잘 알고 써야 한다.가장 어려운것은 Mapping이다. 소스코드는 여기https://github.com/Kyeongrok/baseball_mapping 목차는 다음과 같다.1.Project빌드2.필요한 라이브러리 선택- JPA, MySql, JDBC, H23.application-test.yml 만들기5.Team 엔티티(Entity) 만들기6.Lombok 설정7.TeamRepository 만들기8.TeamRepository test code 만들기 인텔리J를 실행 한다.Create Project를 누른다. 좌측 Spring Initi..