일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 깃허브
- 스프링
- list
- 객체
- 인터페이스
- Spring legacy Project
- spring
- 의존성주입
- java
- JVM
- 상속
- 영속성 컨텍스트
- 어노테이션
- 리액트
- 자바
- Spring 개발환경 설정
- react
- @Bean
- 이클립스
- mysql
- github
- DI
- merge
- 트랜잭션
- 빈
- springboot
- 자동주입
- @transactional
- pom.xml
- 스프링 컨테이너
- Today
- Total
목록Spring Boot/JPA (6)
DEVLOG
이 에러는 not null 제약조건 위반을 뜻한다. 나의 경우, Insert 시 시퀀스 전략으로 @GeneratedValue를 사용하였음에도 자동증가가 안되고 null 처리가 되었다. 왜 @GeneratedValue가 먹히지 않는지 디버깅을 하던 중, 복합 키에서는 @GeneratedValue를 사용할 수 없다는 것을 알게 되었다. https://gaemi606.tistory.com/entry/JPA-%EB%B3%B5%ED%95%A9-%ED%82%A4-Composite-Key-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-IdClass JPA | 복합 키 (Composite Key) 사용하기 (@IdClass) JPA에서 식별자(@Id)를 둘 이상 사용하려면 별도의 식별자 클래스를 만..
open-in-view(OSIV, Open-Session-In-view) = true 로 설정해야 하는 이유는 Service 에서 트랜잭션이 종료된 이후에도 영속성 컨텍스트가 종료되지 않아 Controller에서 view에게 반환할 때 영속성 컨텍스트가 관리하는 객체에 접근할 수 있기 때문이다. https://velog.io/@dnwlsrla40/JPA-Open-In-View [JPA] Open In View Open-In-View는 관례상 OSIV(Open-Session-In-View)라고 하고, 경우에 따라 Open-EntityManager-In-View 라고도 한다. JPA에서 제공하는 기능 중 하나로 application.yml 설정 파일에서 Open-In-View velog.io
Pageable 인터페이스 SpringBoot에서는 Pageable 인터페이스로 비교적 간단하게 페이징을 구현할 수 있다. Pageable 인터페이스는 페이징을 구현할 때 필요한 값들을 편하게 구할 수 있는 메소드들을 추상화 시켜놓았기 때문이다. 그러므로 Controller 에서 Pageable 인터페이스 타입으로 파라미터를 받으면 된다. Page 인터페이스 Page 인터페이스도 내부 메소드를 보면 페이징을 구현할 때 필요한 값들을 getTotalPages(), getTotalElements()와 같은 메소드로 추상화 시켜놓은 인터페이스임을 알 수 있다. 예제 DummyControllerTest.java @RestController public class DummyControllerTest { @Auto..
더티체킹 엔티티의 변경이 일어나면, 변경 내용을 자동으로 데이터베이스에 반영하는 JPA 특징이다. 영속성 컨텍스트의 1차캐시에 담긴 Object(영속화된 Object)와 이를 가져와 수정한 Object를 비교하여 변경을 감지해서 수정한다. 예제 DummyControllerTest @RestController public class DummyControllerTest { @Autowired private UserRepository userRepository; // save() 메소드는 id를 전달하지 않으면 INSERT // save() 메소드는 id를 전달하면 해당 id에 대한 데이터가 있으면 UPDATE // save() 메소드는 id를 전달하면 해당 id에 대한 데이터가 없으면 INSERT @Tran..

JpaRepository 인터페이스 아래 예제에서 자동 주입될 UserRepository.java는 JpaRepository 인터페이스를 상속한다. 이 JpaRepository 는 기본적인 CRUD 를 처리할 수 있는 getOne, findById, findAll, save, delete 등의 함수가 정의 되어있다. 이들 중 findById를 통해 간단한 데이터를 조회할 수 있다. (SELECT) findById() findByid()메서드는 조회하려는 값이 존재할 수도, 존재하지 않을 수도 있어서 null에 의한 오류를 최소화 하기 위해 리턴으로 Optional를 받는다. 그리고 웹브라우저가 요청하면 웹브라우저가 이해할 수 있는 데이터(JSON (GSon 라이브러리 활용하여 변환))로 변환해서 전달해야..

ORM(Object Relational Mapping, 객체-관계 매핑) 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것 @ManyToOne 다대일( N : 1 ) 관계 매핑 정보 연관관계를 매핑할 때 이렇게 다중성을 나타내는 어노테이션(@ManyToMany, @OneToOne 등…)은 필수로 사용해야 하며, 엔티티 자신을 기준으로 다중성을 생각해야 함 @JoinColumn(name="category_no") @JoinColumn 어노테이션은 외래 키를 매핑 할 때 사용 name 속성에는 매핑 할 외래 키 이름을 지정 @JoinColumn 어노테이션을 생략하면 아래와 같은 전략에 따라 외래 키를 매핑 필드명 + “_” + 참조하는 테이블의 기본 키(@Id) 컬럼명 User.java @..