반응형
반응형
문제 Spring Data Jpa 에서 제공하는 deleteById 메소드를 사용해서 데이터를 삭제 했을 경우에 삭제 쿼리 하나만 실행되길 바랬는데. 삭제 쿼리가 실행되기 전에 삭제할 데이터를 찾는 조회 쿼리가 선행 되는 문제가 발생했다. 해결 @Override @Transactional @SuppressWarnings("unchecked") public void delete(T entity) { Assert.notNull(entity, "Entity must not be null!"); if (entityInformation.isNew(entity)) { return; } Class type = ProxyUtils.getUserClass(entity); T existing = (T) em.find(t..
문제 특정 데이터를 관리할 때. 두 가지 방식으로 PK 를 관리한다. 1. auto increase 되는 숫자를 PK 로 사용한다. 2. loginId, 주민번호, 식별 코드 등등 중복되지 않는 유일한 값을 PK 로 사용한다. 두 번째 방식으로 save() 로 새롭게 데이터를 저장할 경우 실행되는 쿼리는 insert 만 실행되길 기대하지만, 데이터를 조회하는 select 가 저장 할 때마다 계속 실행되는 문제가 생겼다. 해결 @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persist(ent..
문제 프로젝트를 진행하는 중에 엔티티 저장하는 과정들을 try {} 로 감싼 후 에러가 발생하면 다른 특별한 조치 프로세스를 취해야 했다. 에러가 발생 했을 경우에 의도한대로 동작하지 않고, 해당 에러가 발생했다. 'null id in entry (don't flush the Session after an exception occurs)' 저장을 시도 했던 엔티티가 저장 하는 과정에서 에러가 발생 했고, 저장에 실패한 엔티티가 id 가 null 인 채로 준영속상태로 세션에 남아있는다. 그리고 마지막에 엔티티매니저가 Flush 되는 순간에 준영속상태로 남아있는 엔티티를 다시 저장을 시도할 때 id 가 null 이기 때문에 발생하는 에러다. 해결 hibernate 는 save() 에 실패 했다고 해서 ..
문제 프로젝트를 진행하는 중에 특정 조건에 맞는 유저들을 검색하고, 해당 아이디들을 기준으로 특정 데이터를 업데이트 하려는 중에 에러를 마주했다. 'ORA-01795 maximum number of expressions in a list is 1000 in bi publisher' 확인해보니 Oracle은 9버전 이후부터 in 절에 1000개가 넘는 데이터를 허용하지 않고 있기 때문에 발생하는 에러였다. // in절에 다량의 데이터로 인한 에러 발생 jpaQueryFactory. select(member). from(member). where(member.id.in(1,2,3,4 ... 1001)). fetch(); 해당 에러에 대해서 서비스에서 QueryDSL 사용 예시로 해결하는 방법을 포스팅 하려고..