본문 바로가기
반응형

JPA24

[JPA] 일부 컬럼만 가져오기 JPA에서 findBy 명령어를 사용하여 entity 를 가져오곤 한다. 자세한 내용은 아래 참고 포스팅 참고 바란다. 만약 entity 에 컬럼이 10개면 10개 컬럼 모두 가져오고 불필요한 컬럼들을 모두 가져오는 경우가 있다. 필요한 컬럼만 가져오는 방법에 대해서 다루려고 한다. 기존 로직은 아래와같다. List findAll(); ///////////////// @Entity public class TestEntity{ @Id public String id; public String name; public String addr; ... } 여기서 id와 name만을 가져오고 싶다면? 필요한 컬럼들만 interface로 다시 만들어준다. public interface TestInterface{ Str.. 2024. 2. 14.
[JPA] save 시 select 쿼리 발생 (Persistable 의 isNew 사용) 이전 포스팅에서 dirty checking 관련해서 글을 다룬적이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 엔티티를 가지고 작업을 하게 될 경우 매번 select 을 하고 update를 하거나 insert 를 할때 더티 체킹을 한다면 만약 bulk insert를 jpa에서 하게 될 경우엔 어떻게 해야할까? 별도의 작업이 없이 읽어서 insert를 하기만 하면된다. 코드는 아래와 같이 간단하다. TestTable ent = TestTable.builder() .id(id) .nameValue("test") .gender(1) .build(); repo.save(ent); 이대로 실행을 하면 [interceptor] requestURI : /test/entitysetnew Hibernate: .. 2024. 2. 7.
JPA메서드 save 와 saveAll 비교 Entity 를 사용하여 save를 할 경우 정상일 경우라면 insert 가 된다. saveAll 함수를 사용하게 될경우엔 List 를 형으로 받아서 처리를 해주고, 리스트를 bulk insert 처럼 삽입을 할수 있다. 둘의 성능 차이가 궁금해서 비교해보았다. 결국 SaveAll 함수 내부 로직을 보면 @Transactional @Override public List saveAll(Iterable entities) { Assert.notNull(entities, "Entities must not be null"); List result = new ArrayList(); for (S entity : entities) { result.add(save(entity)); } return result; } 이와.. 2024. 1. 19.
[JPA] @OneToMany , @ManyToOne JPA 를 사용시 단일 Entity 조회의 경우엔 그냥 사용하면 되지만 다른 테이블과 참조 키가 걸려있거나 Join을 해야하는경우 Entity에서 join하는 특정 테이블을 선언하고 어떤 컬럼과 연관관계인지 명시를 해줘야한다. 일단 Table Name= Grade 순번(pk) 학번 과목 성적 1 111111 수학 A 2 111112 수학 B Table Name= Student 학번 이름 ... 111111 홍길동 111112 이순신 111113 장영실 이렇게 두 테이블이 있다고 가정을 하고 각각 Entity 를 선언해볼것이다. 가독성을 위해 변수명은 한글로 지정할것이다. Grade Table @Getter @Setter @ToString @Builder @AllArgsConstructor @NoArgsC.. 2023. 9. 18.
JPA query Keyword2 (repository) 이전 포스팅에서 jpa 사용하는 query keyword에서 사용하는 메서드들을 정리한 글이 있다. (아래 참고 포스팅 참조) findById부터 시작해서 다양한 메서드가 있었는데 like 문에 대한 내용을 적은적이 없는것 같아서 적으려고 한다. 먼저 Like는 크게 3가지 방법으로 지정할수있다. 1. findByNameLike(String name); repository 에서는 이렇게 사용이 되며 service단에서 호출할때는 List list = repository.findByNameLike("%"+ dto.getName() +"%"); 이렇게 와일드카드를 붙여줘야한다. 이점이 불편해서 나온것이 2. findByNameContains / findByNameContaining / findByNameIs.. 2023. 5. 6.
spring data jpa의 @Query nativeQuery의 IN 절 처리 Query annotation 에서 항상 단건의 변수만 사용을 하다가 리스트로 받아서 in 절에 처리를 해야할 일이 생겼다. 물론 반복문으로 받아서 list를 합쳐도 되지만 좀더 편한 방법이 없을까 하다가 아래 방법을 알게 되었다. 아래와 같이 정의를 하게 되면 리스트를 받아서 쿼리로 in 절로 넣을수 있다. 참고로 객체는 안되고 String이나 integer 등 변수 타입만 가능하다. List findByXXXXXX(@Param("idList") List idlist); 이렇게 선언을 하고 쿼리에서는 아래처럼 사용을 한다. where and id in :idList 2023. 2. 3.
findBy 비교 조건들 이전 포스팅에서 조건들을 몇개 올린적이 있다. 근데 해당 조건들은 대부분 equals 조건들이었다. 자세한 내용은 아래 참고 포스팅을 참고 하자. 이번 포스팅은 equals 을 포함해서 비교 연산자까지 있는 조회 조건을 나열 하려고 한다. 저번 포스팅에서 중복된 내용도 있지만, 공식 홈페이지에 있는 내용이니 아래 내용을 참고하는것이 좀더 좋을것 같다. https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#jdbc.query-methods.at-query Spring Data JDBC - Reference Documentation Example 10. Repository definitions using domain classes with.. 2023. 1. 4.
JPA query Keyword (repository) 이전 포스팅에서 jpa 메서드 들을 간단하게 정리한 포스팅이 있다. 자세한 사항은 아래 참고 포스팅을 참고 바란다. jpa 메서드에 대해서 좀더 다뤄보려고 한다. 자료 출처는spring 공식 홈페이지 에서 docs에서 가져왔다. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords Spring Data JPA - Reference Documentation Example 119. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { Li.. 2022. 12. 6.
JPA메서드 save 와 saveAndFlush 비교 이전 포스팅에서 jpa 에 대해서도 다뤄봤고 영속 방법중 하나인 더티체킹에 대해서도 다뤘다. 아래 참고 포스팅을 확인 바람. 이번 포스팅에서는 더티체킹이 아닌 merger 방법으로 데이터를 영속하는 메서드인 save메서드에 대해서 다뤄볼 것이다. 일단 @Transactional 어노테이션을 붙이지 않을 경우는 새로운 Entity를 만들고 save/saveAndFlush 로 저장을 한다음 set으로 entity 의 값을 변경해주고 db에서 값을 확인해보면 save를 쓰는 경우나나 saveAndFlush를 쓰는 경우나 둘다 set을 할 경우 update 가 되지 않는다. @Transactional 어노테이션을 붙이는 경우에 save와 saveAndFlush를 비교를 하면 똑같이 메서드 종료 후 update가.. 2022. 12. 5.
반응형