JPA6 JpaAuditing을 이용해서 base entity 생성하기 JPA Auditing Auditing은 감사, 감시한다는 뜻으로 JPA를 감시한다는 의미입니다. 즉 JPA Auditing은 Java Persistence API(JPA)를 감시하며 엔티티와 관련된 이벤트를 추적하고 기록합니다. JPA Auditing을 사용하면 엔티티의 생성일(createdDate)과 수정일(lastModifiedDate)을 자동으로 관리하는 기능을 제공하여 개발자가 수정일과 생성일 등을 수동으로 관리하지 않아도 되는 장점이 있습니다. JPA Auditing 설정 하기 의존성 추가 dependencies { // 다른 의존성들... implementation 'org.springframework.boot:spring-boot-starter-data-jpa' } 추가로 propertie.. JPA 2023. 6. 24. JPA에서 soft delete 쉽게 처리하기 이전 글 : 2023.05.09 - [SQL] - Soft Delete, Hard Delete (논리삭제와 물리삭제) Soft Delete, Hard Delete (논리삭제와 물리삭제) 프로젝트를 하다가 이런 생각을 하였다 멤버를 삭제하면 그냥 진짜 바로 삭제해야 하나..? 근데 그렇게 되면 만약 유저가 잘못 누른 경우라면? 만약 이 사람이 우리 사이트를 악용해서 관련 기록 lahezy.tistory.com 수정 전 코드 현재 멤버 클래스는 다음과 같이 구성되어 있다. 이 중 activated는 현재 해당 멤버가 삭제되었는지를 나타낸다. activated가 false 이면 삭제된 객체이다 (soft delete ) JPA에서 soft delete를 도와주는 기능을 모를때는 직접 query문을 조작하여 논.. JPA 2023. 5. 12. JPA, H2 데이터 베이스 대소문자 구분에러 결론 spring에서 대소문자 구분을 하지 않도록 하여 통과하였습니다. 공식문서 내용중 ""(따옴표로 이스케이프)되지 않은것은 대문자로 변경하여 실행한다는것을 보고 이로인하여 문제가 발생했다고 판단하였고 ""로 감싸지 않은 것들도 쿼리 그자체로 실행될 수 있도록 수정하였습니다(대문자로 변경하여 실행되지 않도록 하였습니다) spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_UPPER=FALSE 을 추가하고 기존에 수행하려던 코드(대소문자를 구분하지 않는 코드) @SQLDelete(sql = "UPDATE member SET activated = false WHERE member_id = ?") 로 수정하여 테스트 케이스를 통과하였습니다. 문제 발견 soft de.. JPA/ORM JPA 2023. 5. 12. JDBC, JPA, ORM JDBC(Java Database Connectivity) 자바에서 데이터베이스에 접속하고 쿼리문을 실행하는 자바 API이다. 데이터베이스 종류에 상관없이 일관된 방식으로 데이터베이스에 접속하고 데이터를 관리할 수 있도록 하며, 이를 통해 데이터베이스와 자바 애플리케이션 간의 상호작용을 간단하게 만들어 준다. Spring JDBC 스프링 프레임워크에서 제공하는 JDBC 추상화 계층이다. JDBC API를 좀 더 쉽게 사용할 수 있도록 추상화 계층을 추가하여 JDBC 코드 작성의 번거로움과 복잡성을 줄여준다. 그러나 JDBC를 사용하면 데이터베이스에 대한 직접적인 제어를 할 수 있어 필요한 경우에 더 세밀한 작업을 수행할 수 있는 장점이 있다. JDBC의 기본 기능 뿐 아니라 데이터베이스 연결, 트랜잭션 .. JPA 2023. 4. 12. @CreationTimestamp, @PrePersist(JPA라이프 사이클 어노테이션) @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @CreationTimestamp private LocalDateTime createdDate1; //생성 시점 private LocalDateTime createdDate2; //생성 시점 @UpdateTimestamp private LocalDateTime updatedDate; //업데이트 시점 @PrePersist public void prePersist(User user) { // 저장 전에 필요한 작업 수행 createdDate2 = LocalDateTime.now(); } } .. JPA 2023. 3. 28. 엔터티 설계 주의사항 엔터티에는 가급적 Setter를 사용하지 말자 모든 연관관계는 지연로딩으로 설정하자(실무에서 모든 연관관계는 지연로딩(lazy)해줘야 한다.) @ManyToOne, @OneToMany (@ManyToOne-> eager이 default, one to many -> lazy default 이기 때문에 주의) X to Many는 lazy 가 기본이어서 그냥 두면 되지만, 그 경우가 아니면 (EX. @Many to One) lazy로 변경해야 함 //fetch = FetchType.LAZY @OneToOne(fetch = LAZY) @ManyToOne(fetch = LAZY) 컬렉션은 필드에서 초기화한다. 테이블 이름 생성 전략 카멜 케이스 ➡️ 언더스코어(memberPoint ➡️ member_point) .. JPA 2023. 2. 27. 이전 1 다음