엔티티

package shop.mtcoding.blog.board;

import jakarta.persistence.*;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import shop.mtcoding.blog.user.User;

import java.sql.Timestamp;

@NoArgsConstructor
@Data
@Table(name = "board_tb")
@Entity
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String title;
    private String content;

    // orm
    // @JoinColumn(name = "user_id") // db에 만들어질 이름을 지정할 수 있음
    @ManyToOne
    private User user; // user_id 유저객체에 있는 pk를 잡아서 필드를 만들어준다.

    @CreationTimestamp // insert 될 때 날짜를 자동으로 넣어준다.
    private Timestamp createdAt;

    @Builder
    public Board(Integer id, String title, String content, User user, Timestamp createdAt) {
        this.id = id;
        this.title = title;
        this.content = content;
        this.user = user;
        this.createdAt = createdAt;
    }
}

package shop.mtcoding.blog.board;

import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;

@RequiredArgsConstructor
@Repository
public class BoardRepository {
    private final EntityManager em;

    public Board findById(int id) {

        // id title content userid(이건 어디서 가져옴?) createdAt
        Board board = em.find(Board.class, id);
        return board;
    }
}

board를 조회하면 userid는 유저객체의 id에 담아서 board 객체를 만들어준다.

Untitled

테스트

package shop.mtcoding.blog.board;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.context.annotation.Import;

@Import(BoardRepository.class)
@DataJpaTest
public class BoardRepositoryTest {

    @Autowired
	  private BoardRepository boardRepository;

    @Test
    public void findById_test() {
        int id = 1;

        Board board = boardRepository.findById(1);
    }
}

Untitled

값이 user_id가 하나 보더에 들어올거라 생각했으나 user객체가 조인되서 다 들어왓다.

디폴트는 이걸인데 이걸은 조인해서 가져오고

Untitled

레이지는 조인이 일어나지 않고 자기것만 가져온다 한다.

(첫번째가 이걸이였다)

테스트(레이지)

Untitled