일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스
- DBASE&
- JPA
- 백준
- 위상정렬
- SQL
- ansi sql 단점
- 프로그래머스 이중우선순위큐
- 이분탐색
- ansi sql 장점
- 디베이스앤
- CJ DBASE&
- DFS
- 개발자 면접 준비
- 그리디
- 이중우선순위큐 java
- 이중우선순위큐 자바
- Spring Boot
- 백트래킹
- oracle ansi
- 프로그래머스 이중우선순위큐 java
- Gradle
- BFS
- 프로그래머스 이중우선순위큐 자바
- Java
- DP
- 면접 필수 질문
- oracle ansi sql
- IT 면접 준비
- 디베이스앤 인턴 후기
- Today
- Total
목록Programming/JPA (5)
쉬운 프로그래밍
아래는 서비스 코드이다. 1. 더티체킹 위의 메소드는 update 기능을 수행하고 있지만 DB에 쿼리를 날리는 부분이 존재하지 않는다. 이것이 가능한 이유는 JPA의 영속성 컨텍스트 때문이다. 영속성 컨텍스트는 엔티티를 영구 저장하는 환경으로 생각하면 된다. JPA는 엔티티가 영속성 컨텍스트에 포함되어있는지, 아닌지를 중시한다. 엔티티 매니저가 활성화된 상태로 트랜잭션 안에서 DB를 통해 데이터를 가져오면 이 데이터는 영속성 컨텍스트가 유지된 상태이다. 즉 이 상태에서 해당 데이터의 값을 변경하면 트랜잭션이 끝나는 시점에 해당 테이블에 변경사항을 반영한다. 요약해서 말하면 Entity 객체의 값만 변경하면 별도로 Update 쿼리를 날릴 필요가 없다는 것이다. 이 개념을 더티 체킹(Dirty Checki..
각설하고 본론부터 말하면 @ManyToMany 관계는 사용하지 않는 것이 좋다고 한다. RDBMS는 정규화된 테이블 2개로 N:M 관계를 표현할 수 없다. 그럼 어떤 방식으로 N:M 관계를 다뤄야할까? 바로 조인 테이블을 추가해서 @OneToMany, @ManyToOne 관계를 통해야한다. 코드를 통해 이해해보자. # Product Entity @Entity public class Product { @OneToMany(mappedBy = "product") private List CategoryProducts = new ArrayList(); ... } # Category Entity @Entity public class Category { @OneToMany(mappedBy = "category") p..
Cascade란? cascade는 @ManyToOne이나 @OneToMany에 들어갈 수 있는 옵션이다. 트랜잭션이 일어날 때 Entity 변화를 연관관계를 가진 Entity에 전파시키는 것을 목적으로 한다. Entity 상태란? 1. Transient : JPA가 알지 못하는 상태를 의미한다. 즉 객체를 생성하거나 변경하여도 JPA가 그 객체를 인지하지 못하고 있는 상태를 의미한다. 2. Persistent : JPA가 관리중인 상태를 의미한다. Persistent 상태가 되더라도 바로 Insert가 발생해서 데이터베이스에 저장하는 것이 아닌, Persistent에서 관리하고 있던 객체가 데이터베이스에 넣는 시점에 데이터를 저장함 (1차 캐싱, Dirty Checking, Write Behind 등 기..
Entity에서 Enum 타입으로 필드를 선언하게 되는 경우가 있다. 이러한 경우에 아래와 같이 코드를 작성하면 빌드할 때 VARCHAR이 아닌 Integer로 인식된다. @Column(name = "role") @NotNull private Role role; 이를 해결하기 위해서는 해당 필드에 아래와 같이 @Enumerated 어노테이션을 달아주면 된다. @Column(name = "role") @NotNull @Enumerated(EnumType.STRING) private Role role;
매번 찾아보기 귀찮아서,, 포스팅합니당 1. dependency 추가 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' compile 'mysql:mysql-connector-java' 2. application.properties server.address=localhost server.port=8080 # thymeleaf 컴파일 안해도 갱신가능하게 하는것 spring.thymeleaf.cache=false spring.jpa.hibernate.ddl-auto=validate spring.jpa.database = mysql spring.datasource.driver-class-name=com.mysql.cj.jdbc.Dr..