라벨이 hibernate인 게시물 표시

JPA Insert 시 Select 호출 되는 현상

JPA Entity @Id 필드값으로 DB 체번을 하지 않고 수동 입력으로 설정 해야 할 경우가 있다. 이때, 데이터 저장을 위해 save()를 호출해 보면, select가 먼저 실행 되고 insert가 실행 되는 것을 볼 수 있다. 간략히 이유를 설명하자면, id가 null 일때는 pk가 없는 것과 동일하기 때문에 entity manager는 새로운 데이터로 간주할 수 있으므로 바로 insert를 실행 한다. 그러나 id가 있으면 DB에 이미 존재하는 데이터 일 수 있으므로 먼저 찾아보고 없으면 insert를 하기 때문이다. select가 없이 insert를 실행하고자 하면 아래와 같이 해당 entity에서 Persistable을 구현해 주면 된다. @Entity @Table ( name = "my_table" ) public class MyTable implements Persistable < String > { @Id @Column ( name = "id" ) private String id ; @Transient private boolean isNew = true ; @Override public boolean isNew () { return isNew ; } @Override public String getId () { return this . id ; } @PrePersist @PostLoad void markNotNew () { this . isNew = false ; } ... } 다른 부분들은 제외하고 필요한 부분만 넣었고 설명을 추가하자면, Persistable 인터페이스의 isNew()와 getId()를 구현해 주어야 한다 isNew...

Hibernate Search

Spring Boot + JPA + Hibernate를 사용해 서버를 구성하였다. search 기능이 필요해 Hibernate Search를 넣었는데 사용법은 아래와 같다. Step) 1. pom.xml에 hibernate-search-orm 추가. 2. Entity 추가. 3. ②번의 entity searching을 위한 custom repository interface 추가. 4. ②번의 JpaRepository를 만들고 ④번 repository extends. 5. ③번의 repository searching interface implement. 6. ⑤에서 사용할 NameFilterFactory 추가. 1. pom.xml에 hibernate search 추가 1 2 3 4 5 6 7 <!-- Hibernate Search --> <dependency> <groupId> org.hibernate </groupId> <artifactId> hibernate-search-orm </artifactId> <version> 5.11.1.Final </version> </dependency> 2. MyEntity Entity 생성 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 @Indexed @Entity @Table ( name = "my_entity" ) @Getter @AnalyzerDef ( name = "emailAnalyzer" , tokenizer = @TokenizerDef ( factor...