<aside> 💡 PersistContext 영속성 컨텍스트 이해
</aside>


package shop.mtcoding.blog.board;
import jakarta.persistence.EntityManager;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@RequiredArgsConstructor
@Repository
public class BoardPersistRepository {
private final EntityManager em;
@Transactional
public Board save(Board board) {
// 1. 비영속 객체
em.persist(board);
// 2. board -> 영속 객체
return board;
}
}
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(BoardNativeRepository.class)
@DataJpaTest
public class BoardPersistRepositoryTest {
@Autowired // DI
private BoardPersistRepository boardPersistRepository;
@Test
public void save_test(){
// given
Board board = new Board("제목5", "내용5", "ssar");
// when
boardPersistRepository.save(board);
System.out.println("save_test : "+board);
// then
}
}
package shop.mtcoding.blog.board;
import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
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;
private String username;
@CreationTimestamp // pc -> db (날짜주입)
private Timestamp createdAt;
public Board(String title, String content, String username) {
this.title = title;
this.content = content;
this.username = username;
}
}
DTO로 받아서, Entity로 변경해서 PC에서 던져야 한다