목록SQL, JPA (3)
잡동사니를 모아두는 서랍장
전 회사에서 마주했던 이슈중에 pk를 auto_increment 걸어놓은 테이블에 insert 시 idx 값이 이전에 삽입된 idx 값보다 이상하리만큼 높아진걸 발견했다. 한 두개 차이면 그냥 신경쓰지 않으려고 했는데 거의 1000이 넘게 뛰어있었다. 때문에 그냥 넘기기엔 나중에 문제가 생길 수 있을 거 같아 원인을 찾아봤고 정리한다. 상황은 이랬다. 기존에 초기 테이블에 데이터를 넣을 때 임의로 운영팀이 스크립트 파일을 실행하여 다량의 데이터를 넣어야 하는 환경이다. 중간에 실패했다고 모든 쿼리를 중단하면 안되는 상황이라 insert ignore into를 사용했었다. 그런데 위에서 말한대로 idx가 널뛰기를 하는 상황이 생겼다. 찾아보고 나름 테스트를 해본 결과 innodb의 auto_incremen..
영속성 컨텍스트(Persistence Context) 엔티티를 저장한다. Entity Manager를 생성할 때 만들어진다. Entity Manager로 entity를 저장(persist()), 조회(find(), JPQL, QueryDSL)하면 엔티티 매니저는 이 엔티티를 영속성 컨텍스트에 보관 및 관리. 엔티티 식별은 @Id 필드로 한다. 쓰기 지연(영속성 컨텍스트 내부의 SQL 저장소에 쿼리를 저장해뒀다가 엔티티 매니저 commit 메소드 호출 시 DB에 반영(=flush)). 참고) entity lifecycle 비영속 엔티티가 영속성 컨텍스트와 관련이 없는 상태. 생성되기만한 엔티티. 영속(managed) 영속성 컨텍스트에 엔티티가 저장된 상태. persist, find 호출 시. 준영속(det..
@GeneratedValue의 strategy 속성에 명시(ex : @GeneratedValue(strategy = GenerationType.IDENTITY)) IDENTITY : 기본 키 생성을 데이터베이스에 위임하는 방법 (데이터베이스에 의존적) - 주로 MySQL, PostgresSQL, SQL Server, DB2에서 사용. - 예를 들어, mysql은 auto_increment를 사용하여 기본키 생성. SEQUENCE : 데이터베이스 시퀀스를 사용해서 기본 키를 할당하는 방법 (데이터베이스에 의존적) - 주로 시퀀스를 지원하는 Oracle, PostgresSQL, DB2, H2에서 사용. - @SequenceGenerator를 사용하여 시퀀스 생성기를 등록하고, 실제 데이터베이스의 생성될 시퀀..