spring/JPA

spring/JPA

BaseEntity

생성 시간과 수정 시간을 상속만으로 간단하게 추가할 수 있도록 한다. BaseEntity @EntityListeners(AuditingEntityListener.class) 해당 클래스에 Auditing 기능을 추가해준다. (Jpa가 자동으로 시간 등을 기록해주는 기능) MappedSuperclass 해당 클래스 상속 시 createdAt과 updatedAt을 칼럼으로 인식하게 한다. SpringApplication에 @EnableJpaAuditing을 적용하면 활성된다. @Getter @EntityListeners(AuditingEntityListener.class) @MappedSuperclass public abstract class BaseEntity { @CreatedDate @Column(up..

spring/JPA

custom repository 만들기

jpa interface에서 구현체를 만들려면 너무 많은 것을 override 해야 해서 방법을 찾던 중 custom repository interface를 같이 extends 해주는 방법을 찾았다. ProjectRepositoryCustom interface public interface ProjectRepositoryCustom { } ProjectRepositoryCustomImpl class public class ProjectInterestRelationRepositoryCustomImpl implements ProjectInterestRelationRepositoryCustom{ } JpaProjectRepository interface public interface JpaProjectRepo..

spring/JPA

inner join query

mySQL로 쿼리문을 짠 후에 JPQL로 바꿨다. select * from project as p join project_interest_relation as pir on p.prj_id = pir.prj_id where pir.in_id = 0; @Query(value = "select p from Project as p join ProjectInterestRelation as pir" + " on p.prjId=pir.project.prjId where pir.interest.inId = :interestId") List findByInterest(@Param("interestId") int interestId); 테스트 해본 결과 잘 작동된다!

spring/JPA

@GeneratedValue - GenerationType의 AUTO, IDENTITY 차이점

@GeneratedValue(strategy = GenerationType.AUTO) default insert 쿼리 전에 다음 id 값의 select, update 쿼리를 실행한 후 업데이트된 시퀀스 값으로 insert 쿼리 실행 @GeneratedValue(strategy = Generation Type.IDENTITY) pk 값 없이 insert 쿼리 실행 후 DB의 auto_increment 동작이 수행됨

spring/JPA

외래키를 복합키로 사용

외래키를 복합키로 사용하기 위해서는 연관관계를 맺어주고 JoinColumns으로 복합키의 id를 설정해야 한다. 이때 ManyToOne의 속성을 적절히 맞춰줘야 한다. (cascade 등) @Entity @Table(name = "project_interest_relation") @Data @ToString @AllArgsConstructor @NoArgsConstructor @IdClass(ProjectInterestRelationId.class) public class ProjectInterestRelation { @Id @ManyToOne(cascade = CascadeType.REMOVE) @JoinColumn(name = "prj_id") private Project project; @Id @M..

spring/JPA

복합키

기본 Entity 클래스와 복합 기본키를 표현하기 위한 PK 클래스를 정의해야 함 public, 기본 생성자가 있어야 함 implements Serializable equals와 hashCode를 오버라이딩 해야 함 @EmbeddedId, @IdClass 둘 중 하나로 사용 가능 EmbeddedId가 IdClass 방식보다 더 객체지향적인 방식임 명시적으로 확인하기는 더 어려움 하나의 복합키만 존재 -> EmbeddedId, 매핑이 많이 존재 -> IdClass @IdClass PK 클래스 Serializable을 implements한다 복합키 사용하면 직렬화를 해줘야 함 @Data @NoArgsConstructor public class ProjectInterestRelationId implements..

spring/JPA

외래키

외래키 지정 RDB는 관계형 데이터베이스라 사용할 외래키 하나만 있으면 되지만 java는 객체지향 언어이기 때문에 객체를 전달해주는게 좋다고 한다. User의 usr_id를 Board에서 외래키로 사용하고자 할 경우, user_id만을 외래키로 사용하는 것이 아닌 User 객체 자체를 외래키로 사용하는 것이다. 연관관계 매핑 방향 단방향 관계 : 한 쪽만 참조 양방향 관계 : 서로 참조 엔티티가 서로 참조해야할 경우 양방향으로, 한쪽만 알면 될 경우에 단방향으로 매핑 다중성 @OneToOne 일대일 하나의 엔티티가 하나의 엔티티만 사용 가능 (하나의 member는 하나의 basket 사용 가능) 1:1 관계에서 대상 테이블에 외래키 저장하는 단방향 관계는 JPA에서 지원 X @OneToMany 일대다 -..

spring/JPA

update, delete

@Transactional @Modifying(clearAutomatically = true) @Query(value = "UPDATE Board b set b.title = :title, b.content = :content, b.date_time = :date_time where b.id= :id") void updateBoard(@Param("title") String title, @Param("content") String content , @Param("date_time") LocalDateTime date_time, @Param("id") int id); @Transactional @Modifying(clearAutomatically = true) @Query(value = "delete fr..

hahihi
'spring/JPA' 카테고리의 글 목록