반응형
- Jpa Entity 연관관계가 참조되어있는 객체 삭제2021-06-15 01:31:08개발중에 JPA를 사용하는 의미에 대한 원론적인 깨달음을 다시 얻었다. 기존의 JdbcTemplate이나 잠깐 사용해본 myBatis를 사용할 때 그저 쿼리를 작성하여 데이터베이스라는 서버에서 외부세계를 변화 시키는 용도로만 사용한다는 인식이 강하게 남아있어서 그런지 JPA는 객체지향 스타일로 개발하기 위해 사용는 ORM이라는걸 잊고 있었나보다. 다시 자각한 것에 비해 거창한 상황을 겪은 것은 아니지만 Service단에서 Repository로 특정 엔티티의 값을 없애야 하는 상황이 있었는데 그저 delete로 지우려고하니 violation이라고 친절히 알려주었다. 그래서 "아 지우려고하는 엔티티를 참조하는 다른 엔티티가 있어서 이러는거네"라고 생각이 들면서 JPA는 객체지향 스타일로 개발하는 것이니 관련..
- Jpa Named Query 에러와 @Modifying , @Transactional2021-06-15 01:19:44Spring에서 JpaRepository를 확장해서 사용하는 경우 제공되는 기본 메서드 외에 필요한 동작들은 직접 쿼리를 작성해서 메서드를 선언하는데 보통 선언시 메서드의 인자에 @Param 애너테이션을 붙여 네임드 쿼리로 String의 쿼리문에서 reflection으로 받아서 쿼리를 날리게 되는데 아무것도 없이 일반적인 update문만 날리면 에러가 나온다. 이런 경우 @Modifying 애너테이션을 붙이고 해당 쿼리를 사용하는 서비스단에서 @Transactional을 붙여주어야 정상적으로 동작할 수 있다.
- Iterator 정리2021-05-15 11:05:45오늘은 자바에서 컬렉션 프레임 워크에 저장된 요소를 읽어오는 방법 중 자주 쓰이는 Iterator 인터페이스에 대해 정리해 보겠습니다. 우선 Iterator 인터페이스 내부를 한 번 들여다 보겠습니다. hasNext next remove forEachRemaining 위 4개의 함수가 있네요. 설명을 보면 hasNext는 iteration에 다음 요소가 존재하는지의 여부를 boolean으로 반환하고 next는 해당 iterator에서 다음 요소를 반환합니다. remove는 iteration에서 반환된 마지막 요소를 내부 컬렉션에서 제고하는 역할을 합니다. next()호출마다 한번만 호출 가능하며, 반복이 진행되는 동안 이것 이외의 방법으로 컬렉션이 수정되면 동작이 지정되지 않는다고 설명하고 있습니다. f..
- Shallow Copy & Deep Copy2021-04-13 23:48:49얕은복사와 깊은복사에 대해 알아봅시다. 얕은 복사 한 쪽에서 수정이 발생되면 복사한 객체에도 영향을 준다. 얕은 복사가 참조값을 복사하기 때문에 복사한 객체도 같은 참조값을 가지므로 수정이 반영되는 것 깊은 복사 참조값을 복사하는 것이 아니라 , 원본 객체의 내부 객체의 값까지 복사해서 힙 영역에 객체를 새로 만드는 것으로 수정이 일어나도 원본과는 관계가 없다. 위의 클래스처럼 clone을 재정의한 클래스를 가지고 비교해보겠다. 실행 결과를 보면 clone을 통해 복사한 객체가 얕은 복사라는 것을 알 수 있다. 여기서 생각드는건 내가 객체를 복사할 때 대부분 원본에 복사본의 수정사항을 반영하고 싶을리가 없다는 거다. 그렇다면 clone을 주의해서 재정의해보자. 이처럼 객체 복사시에 의도적으로 얕은 복사를..
반응형