반응형 분류 전체보기580 [JPA] Entity와 Table간의 데이터 타입 변환 Entity와 Table을 매핑할 때 서로 다른 데이터 타입으로 매핑하고 싶다면 어떻게 할까? 이러한 고민을 해결해주는 AttributeConverter을 설명한 뒤에 예제를 통해 적용 방법을 이해해보자. 1. AttributeConverter 인터페이스 public interface AttributeConverter { public Y convertToDatabaseColumn(X attribute); public X convertToEntityAttribute(Y dbData); } - X에는 엔티티의 필드 타입, Y에는 테이블의 컬럼 타입이 들어간다. - convertToDatabaseColumn() 메소드에는 엔티티의 필드를 테이블의 컬럼으로 변환하는 방법을 구현하면 되고, convertToEnt.. 2022. 8. 24. [JPA] JPA와 컬렉션 1. 래퍼 컬렉션 - 원본 컬렉션을 감싸고 있는 내장 컬렉션을 래퍼 컬렉션이라고 부른다. - Hibernate에서 엔티티를 영속 상태로 만들면 그 안에 있는 컬렉션 타입은 래퍼 컬렉션 타입으로 변경된다. ※ org.hibernate.collection.internal.* 2. Collection, List 타입 - 엔티티가 영속 상태가 되면 org.hibernate.collection.internal.PersistenceBag 타입으로 변환된다. - 중복을 허용하고 순서를 보장하지 않는다. - 아래와 같이 ArrayList 타입으로 초기화해서 사용하면 된다. @OneToMany @JoinColumn private Collection members = new ArrayList(); ※ 위와 같은 일대다 단.. 2022. 8. 24. [팀 프로젝트] SQL 교육 사이트 - 20220823 안내 사항 1. 어제 강의 및 회의 내용 1) 2개의 DB를 적용 - 샘플 데이터용 DB와 유저 정보(게시글 포함)용 DB를 따로 구분하기 위해 2개의 DB를 사용하기로 했음 (1) 설정 - 2개의 DB를 사용하기 위해서는 2개의 EntityManagerFactory가 필요하며 이에 따른 DataSource나 TransactionManager도 별도로 추가해줘야 한다. 그리고 JpaRepository에 연결할 EntityManagerFactory와 TransactionManager을 설정해줘야 한다. - 전반적인 방법은 아래 포스팅을 확인하도록 하자. https://kimcoder.tistory.com/560 [SpringBoot] 2개의 DB를 사용하는 방법 SpringBoot 애플리케이션에서 1개의 DB만 사용.. 2022. 8. 23. [JPA] 웹 애플리케이션에서의 영속성 관리 1. 트랜잭션 범위의 영속성 컨텍스트 - 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다. - 트랜잭션이 종료되면 영속성 컨텍스트에 있던 엔티티들은 더 이상 영속 상태가 아니게 된다. - 서로 다른 EntityManager를 사용하더라도 같은 트랜잭션 범위 안에 있다면 같은 영속성 컨텍스트를 사용한다. - 같은 EntityManager를 사용하더라도 트랜잭션 범위가 다르다면 다른 영속성 컨텍스트를 사용한다. Spring 컨테이너는 스레드마다 각각 다른 트랜잭션을 할당하기 때문인데, 이 덕분에 멀티스레드 상황에도 안전하다. 2. 준영속 상태의 지연 로딩 문제 - 트랜잭션이 없는 프레젠테이션 계층에서 엔티티는 준영속 상태가 되기 때문에, 변경 감지와 지연 로딩이 동작하지 않는다. ※ 영속성 컨텍스트가 .. 2022. 8. 22. [JPA] Spring Data JPA(2) 1. 사용자 정의 리포지토리 - Repository의 메소드를 직접 구현해야 할 경우에는 사용자 정의 리포지토리를 추가하면 된다. - 아래 3가지 절차를 걸쳐서 적용하면 된다. i) 사용자 정의 리포지토리 생성 public interface CustomMemberRepository { // 메소드 정의 } ii) 구현체 생성 - 사용자 정의 리포지토리 이름 뒤에 Impl가 붙은 구현체를 생성한다. Impl를 붙이지 않으면 Spring Data JPA가 인식하지 못한다. public class CustomMemberRepositoryImpl implements CustomMemberRepository { // 메소드 구현 } - 만약 Impl가 아닌 다른 키워드를 사용하고 싶다면 @Configuration.. 2022. 8. 20. [JPA] Spring Data JPA(1) 1. Spring Data JPA 소개 - 데이터를 다루는 동작으로는 JPA에서도 마찬가지로 CRUD(Create Read Update Delete)가 있다. JpaRepository 인터페이스는 기본적인 CRUD 메소드들(save, findOne, getOne, findAll, delete, count 등)을 제공해주기 때문에, 레포지토리마다 일일이 CRUD 메소드를 작성할 필요 없이 JpaRepository를 상속한 인터페이스만 만들면 된다. - 특정 동작에 대한 메소드는 Spring Data JPA가 해석할 수 있는 규칙으로 메소드 이름을 지어 추가하면 된다. 놀랍게도, 메소드 이름으로 적절한 JPQL 쿼리가 자동으로 생성되어 실행된다. 메소드 이름 규칙은 [3. 메소드 작명 양식]에서 설명한다. .. 2022. 8. 19. [JPA] JPQL 최적화 1. 벌크 연산 1) 벌크 연산이란? - 성능을 위해 엔티티를 한 번에 수정하거나 삭제하는 연산을 의미한다. - UPDATE와 DELETE 모두 executeUpdate() 메소드를 사용하면 된다. INSERT 벌크 연산은 JPA 표준은 아니지만 Hibernate에서는 지원한다. int resultCount = em.createQuery("[UPDATE/DELETE SQL]") .setParameter("price", 200) .executeUpdate(); // 영향 받은 엔티티의 건수를 반환 - QueryDSL을 이용하는 방법은 https://kimcoder.tistory.com/495의 [11.배치 쿼리]를 참고하자. - 벌크 연산은 영속성 컨텍스트를 무시하고 DB에 직접 쿼리한다. 2) 일관성 문.. 2022. 8. 14. [JPA] 스토어드 프로시저 - 스토어드 프로시저는 JPA 2.1부터 지원되며, 아래와 같이 DB에 저장되어 있는 프로시저를 JPA에서 사용할 수 있다. # inParam 값에 3을 곱해서 반환하는 프로시저 CREATE OR REPLACE RPOCEDURE proc_multiply(IN inParam INT, OUT outParam INT) BEGIN SET outParam = inParam * 3; END - JPA에서 제공하는 ParameterMode는 다음과 같다. ParameterMode.IN : INPUT 파라미터 ParameterMode.OUT : OUTPUT 파라미터 ParameterMode.INOUT : INPUT, OUTPUT 파라미터 ParameterMode.REF_CURSOR : CURSOR 파라미터 1. 스토어.. 2022. 8. 14. IntelliJ 파일 한글 깨짐 해결 방법 프로젝트에서 csv 파일을 추가하는 과정에서 다음과 같이 한글이 깨져있는 것을 확인했다. 해결 방법은 의외로 간단하다. 먼저, "x-windows-949"로 한번 reload를 해준다. 그럼 IntelliJ 하단부에는 아래와 같이 "x-windows-949"로 인코딩 형식이 바뀌면서 파일은 한글이 모두 표시되는 것을 확인할 수 있다. 마지막으로 IntelliJ 하단부의 인코딩을 "UTF-8"로 Convert 해주면 최종적으로 변환이 끝난다. 참고로, 개발 초기에 IntelliJ 에디터의 파일 인코딩과 VM을 UTF-8로 미리 설정해주는 것이 좋은 습관이다. 2022. 8. 13. 이전 1 ··· 9 10 11 12 13 14 15 ··· 65 다음