본문 바로가기

JPA4

[JPA] JPA 복합키 매핑 정리 JPA 프로젝트를 하다가 복합키를 매핑해야하는 일이 생겼다. 근데 이 복합키는 간단한 2개의 필드에 선언하는 것이 아닌, 연관관계에 맞물려 있는 필드 였고, 이 문제를 해결하기 위해서 JPA 복합키에 대한 내용을 구글에 검색하던 중 어떤 사람은 @Id 와 @MapsId를 같이 사용하고, 어떤 사람은 각각 @Id 만을 사용하는 예제를 보았고, 어떤사람은 extends Serialize를 엔티티와 엔티티 id클래스에 모두 적용하는 사람이 있었고, entitiy Id 클래스에만 적용하는 사람이 있었다. 그래서 복합키 매핑을 할 때 어떤 것이 맞는지, 또는 어떤 방법으로 해야하는지 혼란이 왔다. 그러다 어떠한 글을 보고 깨달음을 얻어 이렇게 정리한 내용을 남기려고한다. 일단 복합키를 선언하기 위한 조건들이 4가.. 2022. 8. 9.
[error] javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 오류 JPA querydsl 강의를 진행하면서 test코드를 작성해야 하는 부분이 있었다. 분명 강사님과 같은 코드를 짰는데 나는 제목과 같은 오류가 발생했다. 구글링을 통해 원인을 찾아보니 JPA 자체는 트랜잭션을 기반으로 작동하기 때문에 발생하는 오류였다. 트랜잭션이 유지되는 동안에는 영속성 콘텍스트라고 불리우는 1차 캐시에 엔티티정보가 저장되는데, 트랜잭션이 선언되지 않아 Persist가 진행이 안되는 것 이었던 것 같다. 아무튼 테스트 코드에 @Transactional을 추가해주었더니 바로 해결이 되었다. 2022. 7. 27.
[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.