spring data jpa 를 이용하면 repository 의 save() 메서드를 이용해서 엔티티를 저장한다. 이때 save() 메서드는 저장된 엔티티 객체를 반환하는데, 사실 파라미터로 전달된 엔티티 객체의 상태를 변경하고 그걸 그대로 반환하는거라 파라미터로 전달된 객체와 반환되는 객체가 같다. @Test void 동일한_객체를_반환한다() { var person = new Person("lichking"); var savedPerson = personRepository.save(person); assertThat(person).isEqualTo(savedPerson); } 이런 이유로 따로 equals 를 오버라이딩하지 않은 상태에서 Person 객체를 비교하면 테스트가 통과한다. spring d..
JPA 를 이용하면 엔티티의 상태를 변경해주는 것만으로 update 쿼리를 실행시키게 된다. 이때 발생하는 쿼리는 모든 컬럼을 대상으로 update 를 실행한다. @Entity @Table(name = "person") public class Person { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "person_id") private Long id; @Column(name = "person_name") private String name; @Column(name = "person_age") private int age; // 생성자 생략 public void setAge(int age) { this.age = age;..
JPA 에서 엔티티간에 연관관계를 맺을시 연관관계의 주인이 되는 엔티티에는 @JoinColumn 애노테이션을 이용해 FK 를 설정한다. @JoinColumn 에는 여러 프로퍼티들이 있는데 이중 name 에는 해당 엔티티의 컬럼명을, referencedColumnName 에는 상대방 엔티티의 컬럼명을 적는다. referencedColumnName 을 명시적으로 넣어주지 않으면 디폴트 옵션으로 상대방의 primary key 에 해당하는 컬럼을 이용하게된다. @Entity @Table(name = "person") @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Person { @Id @GeneratedVal..
JPA 유튜브 중에 아래와같은 동영상이 있어 이 문제를 해결해보고자한다. https://www.youtube.com/watch?v=brE0tYOV9jQ&t=156s 먼저 방송에서도 언급하지만 코드베이스는 매우작다. BOOK 엔티티와 BOOK_STORE 엔티티 두개만 존재하고 이 둘은 BOOK(N) : BOOK_STORE(1) 관계이다. @Entity @Getter @Setter public class Book { @Id @GeneratedValue @Column(name = "BOOK_ID") private Long id; @Column(name = "ISBN") private String isbn; @Column(name = "TITLE") private String title; @ManyToOne p..
JPQL 작성 후 파라미터를 매핑하는 방법은 인덱스에 기반한 방법과 이름에 기반한 방법이 있다. 1. 인덱스 매핑@Query("SELECT e FROM Expense e WHERE e.id = ?1") List findById(Long id); spring-data-jpa 를 사용시 id를 이용해 조회하는 쿼리를 자동 생성해주므로 저런식으로 JPQL을 만들필요는 없지만 예제코드임을 기억하자. 이런식으로 인덱스를 사용할 수 있으며 인덱스는 1부터 시작한다. 2번째 파라미터의 경우 ?2 로 매핑해주면 된다. 2. 이름 매핑@Query("SELECT e FROM Expense e WHERE e.id = :#{#id}") List findById(@Param("id") Long id); 이름 기반 매핑의 경우 ..
- Total
- Today
- Yesterday
- code
- toby
- 정규표현식
- javascript
- Design Pattern
- TEST
- DesignPattern
- java
- servlet
- java8
- JPA
- go-core
- generics
- clean code
- http
- backend개발환경
- Spring
- JavaScript Core
- Kotlin
- MySQL
- db
- EffectiveJava
- Jackson
- mariadb
- frontcode
- frontend개발환경
- programming
- OOP
- spring cloud
- Git
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |