JPA

JVM/JPA

[JPA] 트랜잭션 overrideafterCommit, beforeCommit ...

커밋 이전/이후에 추가적인 작업을 진행하고 싶을 때가 있다. @Transactional fun test() { TransactionSynchronizationManager.registerSynchronization(object : TransactionSynchronizationManager(), TransactionSynchronization { override fun afterCommit() { // ... 로직 } }) // ... db 작업 시작 } 트랜잭션 시작하는 메소드 맨 위에 위와 같이 TransactionSynchronizationManager.registerSynchronization를 사용하면 된다. TransactionSynchronization 에서 다양한 메소드가 있으니 본인이 필..

Tools

[Intellij] JPA cannot resolve column name 해결방법

🤨서론 git commit을 진행하는 도중 entity 클래스에서 Warning이 발생했다. 😁본론 Intellij 에서 db연결이 되어 있지 않아서 인식하지 못하는 문제인 것 같습니다. 아마 Intellij가 하나하나 꼼꼼하게 체크를 해서 발생하는 것 같네요.. (이클립스땐 이런거 없었는데) 해결방법은 2가지가 있습니다. 1. 해당 warning을 끈다. 2. Database를 연결한다. 하나씩 살펴보겠습니다. 1. 해당 warning을 끈다. Settings - Editor - Inspections - Unresolved database references in annotations 체크해제 - OK 2. Database를 연결한다. View - Tool Windows - Database + - Da..

JVM/JPA

[QueryDSL] return 으로 Map(집합) 받기

😀서론 테이블 목록을 가져와 목록에서 ID를 통해 내부 정보를 여러 번 조회할 일이 있었다. 쿼리에서 List 로 조회해서 for문으로 돌리기에는 중복된 ID를 여러 번 조회할 수도 있고, 결국 ID를 통해 다른 값들을 얻고 싶은 게 목표 이기에 QueryDSL에서 return으로 Map도 받을 수 있는지 찾게 되었고, 찾아서 정리를 해본다. 🙄준비 위 데이터를 기준으로 결과 값 확인을 진행합니다. 🙂본론 Querydsl에서는 결과 집합(aggregation) 이라는 걸 제공해주는 걸 알았습니다. 결과 처리 방법 쿼리에서 데이터 조회 후 메모리에서 결과에 대한 집합 연산을 수행하는 집합 함수를 의미 합니다. 간단한 예시로 살펴보겠습니다. 1️⃣Map Value 하나 받기 select는 transform에..

JVM/JPA

[JPA] save() isNew를 사용하여 성능개선 하기

😎 서론 사내 모든 프로젝트에서는 데이터베이스에 값을 저장할 때 아이디를 유니크한 값으로 자동생성해주는 로직을 만들어 별도로 태운 후 save()를 하게 된다. 결국 이로 인해 처음 INSERT를 하기 위해서 save를 보낸 모든 데이터 또한 SELECT를 꼭 호출하고, INSERT를 호출하게 되는 문제가 있다. 이는 데이터가 많으면 많을 수록 성능저하에 큰 문제가 있기에 이 로직을 파악하고 성능개선하는 방법을 공유해본다. 😉 본론 ⏳ save() 로직 파악하기. SimpleJpaRepository 클래스에 있는 save()메소드는 아래와 같이 동작을 한다. @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity ..

JVM/JPA

[QueryDSL]like, contains 차이

서론 회사에서 자체프레임워크를 사용하다보니 기본으로 제공되는 like와 contains를 잘 사용할 일이 없었다. 그러다 최근에 사용할 일이 있어 like를 사용하게 되었는데, 원했던 어디든 포함이 되는 like가 진행되지 않아 찾아보게 되었다. 본론 둘 다 쿼리가 날라가는 것은 LIKE로 날라가지만 contains는 앞 뒤로 %를 자동으로 붙여주고, ex) %튀김% like는 입력한 그대로 날라간다. ex) 튀김 사용 예 contains : 앞, 중앙, 뒤 상관 없이 문자가 포함이 되는지 확인하고 싶을 때 like : 앞, 중앙, 뒤 원하는 곳에 포함이 되는지 확인하고 싶을 때 직접 %를 붙여서 사용

JVM/JPA

[QueryDSL] 표현식 정리

queryDSL을 작성할 때 자주 안 쓰는 친구들은 쓸 때마다 헷갈려서 공식사이트에서 그대로 가져와봤습니다. //Standard Alternative expr isNotNull expr is not(null) expr isNull expr is null expr eq "Ben" expr === "Ben" expr ne "Ben" expr !== "Ben" expr append "X" expr + "X" expr isEmpty expr is empty expr isNotEmpoty expr not empty // boolean left and right left && right left or right left || right expr not !expr // comparison expr lt 5 expr ..

JVM/Spring

[SPRING]@Transactional Annotation 알고 쓰자

- 첫 작성일 : 21년 3월 21일 velog 블로그 1. 서론 초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고, 막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다. 하지만, 내 코드를 보신 선임께서 단지 @Transactional 만 붙이면 롤백이 안되고, @Transactional(rollbackFor = Exception.class) 을 붙여야 된다고 알려주셨다. 여기에서 뭐 때문인지에 대해 호기심에 트랜잭션에 대해 찾아보다가 내가 생각했던 것 보다 더 많은 기능들이 존재한다는 것을 알고 정리해보려 한다. 2. 트랜잭션이 뭐지? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, c..

JVM/JPA

[JPA] PostgreSQL @Lob 에러

- 첫 작성일 : 21년 2월 14일 velog 블로그 @Lob 이란? JPA 어노테이션 중 하나로 db 문자열을 길이제한 없이 text로 사용할 수 있도록 연결해주는 녀석입니다. 버그내용 PostgreSQL에서 @Lob을 사용하여 get으로 정보를 불러올 때 Large Objects in auto-commit mode 와 같은 에러가 발생하게 됩니다. 해결방법 @Lob 대신 @Column(columnDefinition="TEXT") 사용 2021-04-23 추가내용 kdhyo98.tistory.com/35 [PostgreSQL] CLOB타입과 TEXT타입 - JPA 🤸‍♂️서론 예전에 @Lob 에러 관련 글을 적은 적이 있다. 당시에는 postgresql에서 @Lob을 아예 사용할 수 없는 줄 알고 @..

Hyo Kim
'JPA' 태그의 글 목록