전체 글
-
[JPA] 객체지향 쿼리 언어(JPQL) 소개인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 12. 1. 15:41
JPQL(Java Persistence Query Language) 예제 코드 JPQL의 단점: 동적 쿼리를 작성하기 어렵다. 문자와 문자를 말그대로 더해야 하기 때문에 에러가 발생할 확률이 높음. - QueryDSL은 JPQL에 대해서만 잘알면 문제없이 사용할 수 있다. - 엔티티 매니저를 통해 쿼리를 생성하는 경우에는 자동으로 flush가 되지만 db 커넥션을 통해 쿼리를 생성하는 경우에는 강제로 flush를 하지 않으면 영속성 컨텍스트의 사항이 db에 반영되지 않는다. 출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 https://www.inflearn.com/course/ORM-JPA-Basic 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 현업에서 실제..
-
[JPA] 값 타입인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 30. 23:27
- 이러한 자바 기능 덕분에 side effect 없이 값들을 안전하게 사용할 수 있다. - 임베디드 타입을 사용하면 테이블에 저장되는 것은 동일하지만 객체지향스럽게 코드를 작성할 수 있게 된다. 예제 코드 - 임베디드 타입도 결국 테이블 컬럼들의 모음이기 때문에 테이블에서 외래키를 필드로 가질 수 있듯이 임베디드 타입도 엔티티를 가지고 연관관계를 맺을 수 있으며 또 다른 임베디드 타입도 가질 수 있다. 예제 코드 - 이렇게 작성하게 되면 Address 안의 city, street, zipcode 필드가 중복되게 되어 에러가 발생한다. 결과 쿼리 애너테이션 관련 꿀팁 - 해당 애너테이션에 들어가서 애너테이션 명에 마우스를 올리면 위와 같이 예제를 통한 사용법을 알려준다. 예제 코드 일반 클래스에서 equ..
-
프로젝트 생성 시 gradle 오류개발 지식/기타 2023. 11. 30. 16:16
구글링해보니 프로젝트에 세팅된 jdk 버전과 gradle 설정 jdk의 버전이 맞지 않아서 발생한 문제였다 이 부분을 변경해주면 된다. 참고 자료 https://velog.io/@m2nja201/build.gradle-%EC%98%A4%EB%A5%98-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EC%8B%9C-gradle-%EC%98%A4%EB%A5%98-spring-boot-intelliJ [build.gradle 오류] 프로젝트 생성 시 gradle 오류 (spring boot, intelliJ) 1. 🚨 문제 발생 A problem occurred configuring root project 'practice'. > Could not res..
-
환경변수개발 지식/기타 2023. 11. 30. 14:36
환경 변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임이다. - 핵심은 환경 변수가 필요한 정보를 손쉽게 접근/처리할 수 있게 해주는 역할을 한다는 점이다. 동작 예시 - 우리가 어떤 언어를 다운받고 환경 변수 PATH를 설정해주는 것도 이와 같이 사용하기 위해서다. 참고 자료 https://gliver.tistory.com/43 환경 변수(PATH)란? 목차 환경 변수란? 환경 변수 PATH 환경 변수란? 환경 변수(Environment Variable)란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. 프로세스(Process)는 컴퓨터에서 실 gliver.tistory.com
-
맥 터미널에서 심볼릭 링크 만들기개발 지식/기타 2023. 11. 30. 14:05
상황 맥 터미널에서 brew install openjdk@17 명령어로 openjdk 17버전을 다운로드 하였는데 다음과 같은 로그가 떴다. 하나씩 살펴보면 - 방금 다운로드한 openjdk를 시스템이 찾게 하기 위해서는 위의 명령어로 해당 경로에 심볼릭 링크를 생성할 수 있다는 의미이다. 심볼릭 링크: 리눅스에서 다른 파일이나 폴더를 가리키는 파일을 의미한다. - keg-only란 뒤에 나온 설명처럼 /opt/homebrew 경로에 대해 심볼릭 링크 과정이 생략되었다는 뜻이고, 그 이유는 다른 버전으로 대체될 수 있는 버전이기 때문이라는 설명이다. - 여기서 formula는 Homebrew에서 패키지의 설치 및 빌드 정보를 담고 있는 Ruby 스크립트 파일을 의미한다. - 이 버전을 우선적으로 사용하려..
-
[JPA] 영속성 전이(CASCADE)와 고아 객체 정리개발 지식/JPA 2023. 11. 30. 10:27
영속성 전이 시 주의할 점 @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List postList = new ArrayList(); - persist를 하는 경우에 영속성 전이를 제대로 동작시키기 위해서는 연관관계 주인쪽 세팅뿐만 아니라 member.getPostList().add(post) 이런 식으로 양방향 세팅을 해야한다. - 영속성 전이의 부모와 자식 관계는 말 그대로 영속성이 전이되는 것만 해당하고 연관관계의 주인은 db에 연관관계가 있는 객체들을 저장할 때 반드시 연관관계를 세팅해야 하는 쪽을 의미하므로 둘은 전혀 다른 개념이다.(연관관계의 주인이 아닌 쪽은 읽기만 가능) CascadeType.REMOVE vs 고아 객체..
-
[JPA] Referential integrity constraint violation개발 지식/JPA 2023. 11. 29. 22:56
- 현재 member가 삭제되면 해당 member의 post들도 삭제가 될 수 있게 CascadeType.REMOVE를 적용해둔 상태이다. - 해당 코드에서 em.flush() 코드를 제거하면 정상작동하는데 delete 쿼리를 확인하고 싶어서 추가하였을 때 Referential integrity constraint violation 에러가 발생하였다. - 참조 무결성 제약 조건이란 참조할 수 없는 외래키 값을 가질 수 없다는 조건이다. 즉, member를 삭제하였더니 post가 참조하고 있는 member가 참조할 수 없는 상황이 되어서 발생한 것 같다. - 혹시 영속성 전이가 일어나지 않은 것 아닐까 하는 생각에 post1이 영속성 컨텍스트에 있는지 확인해봤다. System.out.println(em.g..
-
[JPA] 영속성 전이(CASCADE)와 고아 객체인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 29. 17:53
예제 코드 @Entity public class Member { @OneToMany(mappedBy = "member", cascade = CascadeType.REMOVE) private List postList = new ArrayList(); } @Entity public class Post { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; } - 이 경우에 회원을 삭제하게 되면 관련된 게시글들도 삭제되게 된다. 그러면 영속성 전이는 언제 써야 하는가? - OneToMany에 다 써야하는건 아니고 하나의 부모가 자식들을 관리하는 경우에만 사용하는 것이 좋다. - 즉, 이 자식을 다른 엔..