본문 바로가기

JPA

(5)
JPA enum으로 컬럼 관리 DB에 특정 데이터만 들어가야 하는 경우가 있어요. 성별: 남자/여자 삭제플래그: YES/NO 상태값: 준비/진행/완료 등등 비즈니스에 따라 여러가지 경우가 있는데요. 데이터를 관리하기 용이하도록 enum을 활용해볼게요. 예시는 쉽게 남자/여자 데이터로 해볼게요. 우선 enum 클래스를 하나 만들어주세요. description 필드는 굳이 안넣어도 됩니다. Gender.java (enum) @Getter @AllArgsConstructor public enum Gender { MALE("남자"), FEMALE("여자"); private String description; } User.java (Entity) @Entity @Getter @Setter public class User { @Id @Gener..
No identifier specified for entity (JPA) 스프링 부트(Spring Boot) 애플리케이션을 실행했는데 오류가 났어요. org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.exa..
MyBatis vs JPA 차이, 사용후기, 장단점 MyBatis SQL 중심 개발 장점 겁내 쉬워요. SQL의 강점과 특징을 그대로 쉽게 활용할 수 있음 어떤 시스템이든 무난하게 평균 효율을 낼 수 있음 단점 SQL을 직접 작성하여 반복되는 작업이 존재 SQL로 모든 문제의 해결을 쉽게 할 수 있어서 테이블 설계에 소홀해지는 경우가 많음 JPA Object 중심 개발 장점 DBMS 벤더에 종속되지 않도록 개발 가능 기본적인 CRUD 쿼리를 반복적으로 작성하지 않아도 됨 수정사항이 발생하였을 때 수정해야 할 코드가 적음 빌드 과정에서 오류 발생 Type-Safe 단점 겁내 어려워요. 복잡한 쿼리를 사용해야 할 때에 불리, 복잡한 쿼리를 지양하며 꼭 필요한 경우 Querydsl이나 jOOQ와 같은 라이브러리 사용을 권장 JPA 사용하면 불리한 경우 이미 설..
JPA 작성자, 수정자 자동 세팅 Auditor JPA를 활용할 때 게시글의 작성자,수정자 아이디를 자동적으로 세팅해주고 싶은 경우가 있어요. 비즈니스 로직단에서 일일이 세팅하는 수고를 덜어주죠. 이 예제에서는 알아보기 쉽도록 아주 기본만 작성하였습니다. AuditorAwareConfig 소스 설명 드릴게요. UserInfo는 세션 아이디를 담아둔 객체입니다. 테이블에 넣어줄 로그인 사용자 ID를 Optional 클래스에 세팅하여 리턴하면 끝입니다. AuditorAware를 구현할 때 대부분의 예제에서는 별도의 클래스를 만들어서 임포트 받지만 여기서는 최대한 간단해보이도록 한 소스 파일에 직접 구현했습니다. @Resource private UserInfo userInfo; Long userId = userInfo.getIdIsLogin(); 로그인 체..
JPA @ManyToOne Join (Only JpaRepository) JPA에서 @ManyToOne 어노테이션으로 조인한 Entity를 Join으로 조회하려고 해요. Inner Join과 Left Outer Join 모두 다뤄보겠습니다. JpaRepository를 이용할거구요. Native Query는 사용하지 않을거에요. 작업 환경은 Spring Boot 2.1.9 + JDK 11 버전입니다. 1. BoardEntity @Entity @Table(name = "board") @Getter @Setter public class BoardEntity implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTI..