본문 바로가기

프로그래밍/JPA5

[JPA] QueryDSL의 DSL이 궁금하다! 갑자기 뜬금포로 DSL이 궁금해서 ChatGPT에게 질문했다. DSL은 Domain-Specific Language의 약어로 특정 도메인에 적합한 언어를 의미한다고 한다. 그럼 QueryDSL은 SQL, Structured Query Language, 즉 데이터베이스라는 도메인에 적합한 언어일 것이다. 특정 도메인에 적합한 언어라... 그럼 JAVA에 적합한 DSL도 있을까? 구글 검색을 시작했다.!!! 그랬더니 자바에도 DSL이 있었다!! (정확히 말하자면 자바와 관련된 DSL!) 평소에도 자주 쓰고 있던~~ 스트림이!!!!! 컬렉션을 조작하는 DSL이었던 것!! 오호~ DSL에 대해서 좀 더 이해되기 시작했다. DSL은 특정 도메인에 국한 되어서 그 도메인을 가지고 놀 수있는 언어랄까? 즉 도메인이 .. 2023. 3. 3.
[JPA] JPA 복합키 매핑 정리 JPA 프로젝트를 하다가 복합키를 매핑해야하는 일이 생겼다. 근데 이 복합키는 간단한 2개의 필드에 선언하는 것이 아닌, 연관관계에 맞물려 있는 필드 였고, 이 문제를 해결하기 위해서 JPA 복합키에 대한 내용을 구글에 검색하던 중 어떤 사람은 @Id 와 @MapsId를 같이 사용하고, 어떤 사람은 각각 @Id 만을 사용하는 예제를 보았고, 어떤사람은 extends Serialize를 엔티티와 엔티티 id클래스에 모두 적용하는 사람이 있었고, entitiy Id 클래스에만 적용하는 사람이 있었다. 그래서 복합키 매핑을 할 때 어떤 것이 맞는지, 또는 어떤 방법으로 해야하는지 혼란이 왔다. 그러다 어떠한 글을 보고 깨달음을 얻어 이렇게 정리한 내용을 남기려고한다. 일단 복합키를 선언하기 위한 조건들이 4가.. 2022. 8. 9.
[JPA] 연관관계 매핑[실무] JPA를 사용하는 프로젝트에서 연관관계 매핑을 해야하는 일이 생겼다. JPA강의를 들을 때만해도 굉장히 쉬웠고, 포트폴리오를 작성할 때도 간단하게 넘어갔던 부분이었는데, 그새 다 까먹은건지 실무에 와서 조금 삽질을 한 것 같아 나중을 위해 적어두고 계속해서 수정해나가고자 한다. 1. 연관관계 매핑 1:N 이번 프로젝트에서 1:N 관계로 진행되는 경우가 많았고, 또 양방향으로 할지 단방향으로 할지 굉장히 혼란스러웠다. 삽질없이 단순 심플하게 진행하고 싶다면 단방향 관계로 진행할 것을 추천한다. 단방향관계는 굉장히 쉽다. FK를 가지고 있는 연관관계의 주인 필드에 @ManyToOne과 @JoinColumn을 설정해주면 된다. 양방향 관계는 별로 추천하지 않는다. 그래도 굳이 넣어야한다고 한다면 컬렉션내부에는.. 2022. 7. 26.
[JPA] JPA로 다른 스키마에 있는 테이블에 쿼리 날리기(with mysql) JPA를 이용한 프로젝트를 진행하면서 외부에 있는 테이블에서 데이터를 조회하거나 외부테이블과 내부테이블을 같이 조인하여 데이터를 조회해야 하는 경우가 생겼다. 모든 경우가 이 방법으로 해결 되지 않겠지만, 매우 간단한 방법으로 다른 스키마에 있는 테이블에 있는 데이터를 조회할 수 있는 방법을 소개해보고자 한다. 1. @Table 의 기능을 이용하면 굉장히 간단하게 다른 스키마에 있는 데이터를 조회하거나 수정할 수 있다. 바로바로~~~ @Table( catalog = "`외부스키마명`") 이것이다. 꼭 " " 큰따옴표 안에 백틱을 넣어줘야 한다. 백틱을 넣어주지 않는 다면 mysql 문법이 맞지 않아 조회가 되지 않는다. 위의 @Table 설정을 자기가 조회하고자하는 외부 테이블의 엔티티에 선언해주고 조회.. 2022. 7. 25.
[JPA] Spring Data JPA를 이용한 JPA Auditing 날짜 자동 생성, 저장(Auditing in JPA ). 1. 아래와 같은 코드를 클래스에 선언해서 클래스를 작성 @EntityListeners(AuditingEntityListener.class) @Getter @MappedSuperclass 2. 날짜 같은 경우는 아래와 같은 코드를 작성하면 완료 된다. @CreateBy 같은경우는 더 설정해주어야 할 것이 남음. @CreatedDate @Column(updatable = false) private LocalDateTime createDate; @CreatedBy @Column(updatable = false) private String CreateUser; @LastModifiedDate private LocalDateTime lastModDate; @LastModifiedBy private String .. 2022. 7. 25.