[JPA] Entity와 Repository

Entity 클래스와 Repository 인터페이스는 쌍으로 같은 위치에 존재해야한다.

이는 쿼리매퍼의 Dao패키지와 같은 레벨 정도라고 생각하면 좋은 것 같다.

Repository 인터페이스가 존재는 Entity에 접근하기 위함인듯~? 접근법이 있다!

 

 

 

Posts.java

package com.jhs.book.springboot.domain.posts;

import com.jhs.book.springboot.domain.BaseTimeEntity;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.*;

@Getter // 모든 필드의 Getter 메소드 자동 생성 (롬복)
@NoArgsConstructor // 기본 생성자 자동 추가 (롬복)
@Entity // 테이블과 링크될 클래스임을 나타냄 (기본값으로 클래스의 카멜케이스 -> 캐밥케이스로 테이블 이름 매핑(HelloWorl.java -> hello_world table))
public class Posts extends BaseTimeEntity {
    @Id // PK 필드
    @GeneratedValue(strategy = GenerationType.IDENTITY) // auto_increment
    private Long id;

    @Column(length = 500, nullable = false) // default로 varchar(255) & nullable=true
    private String title;

    @Column(columnDefinition =  "TEXT", nullable = false)
    private String content;

    private String author;

    @Builder // 빌더 패턴 클래스 생성, 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함 (롬복)
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }
}


- setter는 entity 클래스에서 절대 만들지 않는다. 대신 목적과 의도를 나타내는 메소드를 추가해야함!

 

 

PostsRepository.java

package com.jhs.book.springboot.domain.posts;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface PostsRepository extends JpaRepository<Posts, Long>{
    @Query("SELECT p FROM Posts p ORDER BY p.id DESC")
    List<Posts> findAllDesc();
}

- JpaRepository<Entity 클래스, PK 타입> 상속

- Entity 접근자

- @Repository 추가할 필요없음. 단, Entity 클래스와 같은 경로에 위치해야함.

이 글을 공유하기

댓글

Designed by JB FACTORY