728x90
반응형

Hibernate 21

[JPA] JPQL 및 queryDSL 사용자정의 함수 등록법 (MySql)

public class UserFunctionDialect extends MySQLDialect { /** 생성자를 통해 등록한다. 등록법은 MySQLDialect 클래스를 참조한다. */ public UserFunctionDialect() { registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING)); } } public class JpqlLv1 { @PersistenceContext EntityManager em; @BeforeEach public void before() { Team teamA = new Team("teamA"); Team teamB = new Team("team..

[JPA] queryDSL 기본 설정

[build.gradle 파일] 1.  최 상단 queryDslVersion 추가 (spring boot 2.6.0 이상일 경우)buildscript { ext { queryDslVersion = "5.0.0" }}2. plugin 추가id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" 3. dependencies 라이브러리 추가implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}" 4. 하단 추가코드 - test {useJUnitPlatform()} 하위에 추가def ..

Hibernate/QueryDSL 2023.06.20

[JPA] Auditing과 MappedSuperClass(상속)

Auditing JPA에서 'Audit'는 감시하다 라는 뜻으로 사용된다. 각 데이터 마다 '누가', '언제' 데이터를 생성하고 변경했는지 감시한다는 의미이다. 엔티티 클래스에는 공통적으로 들어가는 필드가 있다. 예를들어 '등록일자'와 '수정일자' 같은 것이다. 대표적으로 가장 많이 사용되는 필드를 나열해보면 다음과 같다. 등록자 등록일자 수정자 수정일자 매번 엔티티를 생성하거나 변경헐 때마다 값을 주입해야 하는 번거로움이 있다. 이 같은 번거로움을 해소하기 위해 Spring Data JPA에서는 이러한 값을 자동으로 넣어주는 기능을 제공한다. 각각의 기능에 대한 어노테이션은 아래와 같다. 등록자 @CreateBy 등록일자 @CreateDate 수정자 @LastModifiedBy 수정일자 @LastMod..

JPA EntityManager - Entity 기본 구현 및 SELECT, INSERT, UPDATE, DELETE

Entity JPA가 관리할수 있도록 하는 자바 객체이다. Member Entity Class생성 @Entity //JPA 첫로딩시 Entity로 관리할수 있도록 인식 //@Table(name = "USER") // DB에 Member라는 이름이 아닌 User라는 이름의 테이블을 설정한다면 해당 어노테이션으로 지정한다. 생략시 엔티티 클래스명으로 테이블이 관리됨. public class Member { @Id private Long id; // @Column(name = "username") //DB 컬럼이 username이라면 해당 어노테이션을 통해서 Entity가 관리된다. (생략시 필드명으로 컬럼명이 관리됨) private String name; public Long getId() { return ..

SpringDataJPA 쿼리메소드 N+1 LeftOuterJoin걸기 @EntityGraph

fetch정책과 N+1 JPA 기본 메소드인 findAll()의 경우 fetch정책이 LAZY인경우 N+1이 발생하는데, +1과 관련된 연관 엔티티를 조회하는 시점에 +1이 발생한다. (연관 엔티티를 따로 조회하지 않으면 연관관계의 주인이 되는 엔터티에 대한 조회만 발생) but 쿼리메소드의 경우 fetch정책과 관계없이 N+1이 발생하는데, +1과 관련된 연관 엔터티를 함께 조회하지 않더라도 +1이 발생한다. (연관관계의 주인이 되는 엔터티만 조회하더라도 연관 엔터티를 함께 조회한다) N+1현상으로 인해 쿼리가 각각 조회되는것을 LEFT JOIN으로 한번에 조회하는 방법이 있다. 그것은 바로 FETCH JOIN이다. FETCH JOIN 기본 메소드의 경우 연관관계 어노테이션 fetch옵션을 EAGER로..

SpringDataJPA Query문 콘솔 출력 색상 및 줄개행, 파라미터 식별 등 가독성 설정

[build.gradle 파일] 코드 추가 implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' [ application.properties 파일 ] 코드 추가 # JPA의 구현체인 Hibernate가 동작하면서 발생한 SQL의 가독성을 높여준다. #spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.format_sql=true spring.jpa.properties.hibernate.highlight_sql=true spring.jpa.properties.hibernate.validator.apply_to_ddl=false [ P6SpyF..

[Spring Data JPA] 연관관계 매핑 LeftJOIN / InnerJOIN , @ManyToOne / @OneToOne , 단방향 / 양방향

Master : board (PK - id / FK - userid) Detail : member (PK - id) board 테이블의 userid컬럼은 member테이블의 id 컬럼을 참조합니다. 아래와 같이 Entity 클래스를 구현합니다. @Entity @Table(name="board") public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; @Column private String content; /* Join - member Entity의 userid와 연결되어있다. * member테이블과 함께 조회할때 사용. * 어떤 회원이 쓴 게시글인..