JAVA JAVA/- Spring 2022. 6. 24. [spring] 테스트시 Rollback 발생, 테스트시 트랜잭션 적용 test코드를 작성하고 성공은 했습니다. 하지만 db에 직접적으로 반영이 안되었습니다. 근데.. 테스트는 완료되는데 Rollback이 발생하네요. 콘솔에 Rolled back transaction for test context 라고 떴습니다. 찾아본 결과 스프링에서 @Test annotation과 함께 설정된 @Transactional은 항상 rollback됩니다. 따라서 create, update, delete의 로직이 정상적으로 수행됨은 확인하면서도 실제로 DB에 반영되지는 않습니다. 롤백이 되는 것과 에러가 발생하는것은 분명한 차이가 있습니다. PK(id)가 중복된다면 rollback이 아니라 에러가 발생한 경우입니다. 데이터베이스에 데이터가 없다고 정상처리되지 않았다고 판단하면 안됩니다. JUni.. JAVA/- Spring 2022. 6. 22. [spring] DI 알아보기 DI(Dependency Injection)이란? Inversion of Control 이라고도 하는 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법입니다. (new 연산자를 이용해서 객체를 생성하는 것을 받아 쓰는 것입니다.) setter와 생성자로 객체를 받아서 쓸 수 있습니다. import org.springframework.stereotype.Service; @Service public class BookService { private BookRepository bookRepository; public BookService(BookRepository bookRepository) { th.. JAVA/- Spring 2022. 6. 2. [spring boot] JPA에서 일반 Join과 Fetch Join의 차이 Join, Fetch Join 차이점 요약 일반 Join Fetch Join과 달리 연관 Entity에 Join을 걸어도 실제 쿼리에서 SELECT 하는 Entity는 오직 JPQL에서 조회하는 주체가 되는 Entity만 조회하여 영속화 조회의 주체가 되는 Entity만 SELECT 해서 영속화하기 때문에 데이터는 필요하지 않지만 연관 Entity가 검색조건에는 필요한 경우에 주로 사용됨 Fetch Join 조회의 주체가 되는 Entity 이외에 Fetch Join이 걸린 연관 Entity도 함께 SELECT 하여 모두 영속화 Fetch Join이 걸린 Entity 모두 영속화하기 때문에 FetchType이 Lazy인 Entity를 참조하더라도 이미 영속성 컨텍스트에 들어있기 때문에 따로 쿼리가 실행되지.. JAVA/- Spring 2022. 5. 29. [lombok] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor 에 대해 @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해줍니다. @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만들어줍니다. @RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어줍니다. @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor public class User { private Long id; @NonNull private String username; @NonNull private String password; private int[] scores; } User user1 = new U.. JAVA/- Spring 2022. 5. 18. [spring boot] Paging 처리 해보기 @Repository public interface ProductRepository extends JpaRepository { //ProductType이 sale인것을 가져오는 쿼리(pagenation 가능) Page findByProductTypeOrderByIdDesc(ProductType type, Pageable pageable); //ProductType이 sale인것을 가져오는 쿼리 List findAllByProductType(ProductType type); } 한 페이지에 물품 9개를 올려보려고 합니다. mysql에서는 select * from product limit 10 offset 1; 이렇게 쓰면 이런식으로 product테이블에 있는 값들이 나옵니다. limit는 한번에 가져올 데.. JAVA/- Spring 2022. 5. 14. [spring boot] db에 이전에 넣었던 값 다시 넣어보기 쇼핑몰에서 물품등록을 여러개 해야할 때 홈페이지가서 하나하나 등록하는것은 어렵습니다. 그래서 for문을 통해 자동적으로 물품등록이 되어서 여러가지 상황을 만들어보고자 합니다. Product는 (Members와 Category 테이블)이 다대일로 연결되어있습니다. ProductImage는 Product와 다대일로 연결되어 있습니다. Product product = productService.findById_Product((long) 314); //더미 이미지 만들기, jpg -> MultipartFile로 만들기가 힘들다 List imageFiles = List.of( new MockMultipartFile("7a88ca37-9e3b-4be3-af72-1bd6e5b7fe9f.jpg", "7a88ca37-9.. JAVA/- Spring 2022. 5. 13. [spring boot] @Transactional이란? @Transactional 이라는 어노테이션이 어떤 역할을 하는지 궁금해서 글을 써봅니다. 일단 트랜잭션에 대해 알아봐야 합니다. 트랜잭션(Transaction)이란? 트랜잭션(Transaction)의 정의를 내려보자면, 트랜잭션은 Database의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업 단위나 한번에 수행되어야할 일련의 연산을 의미한다. @Transactional은 트랜잭션을 처리하는 어노테이션 입니다. 스프링 환경에서는 @Transactional을 이용하여 메서드, 클래스, 인터페이스의 트랜잭션 처리가 가능합니다. 이러한 방식을 선언적 트랜잭션이라고 부릅니다. 프록시 객체가 생성되어 자동적으로 커밋이나 롤백을 해준다고 생각해봅시다. Spring @Transactonal 기능제공 방.. JAVA/- Spring 2022. 5. 1. [spring boot] JPA, 다대일 관계에서 '다'쪽이 주인이다. 여기 Product와 ProductImage 테이블이 있습니다. 하나의 Product의 여러개의 image가 들어갈 수 있다는 생각에 Product는 1 ProductIamge는 N이라고 N:1의 관계를 연결했습니다. Product 테이블을 보면 @OneToMany로 product 테이블에 mappedBy되어 있습니다. 외래키를 관리 당하는 쪽입니다. ProductImage 객체의 product를 뜻합니다. @ManyToOne으로 양방향 관계에서 외래키를 관리하고 있습니다. 외래키는 product 테이블의 Product_id 입니다. @OneToMany란? N:1 양방향관계에서 1쪽에서 N쪽으로의 방향성 또는 1:N 단반향에서는 컬렉션을 참조하므로 Set, List, Map을 사용할 수 있다. 1:N 관.. JAVA/- Spring 2022. 4. 26. [spring boot] spring boot로 카테고리 상세화 만들어보기 처음 카테고리를 나누려할 때 1차원 적으로 의류, 신발, 가방 등... 이렇게만 나누려고 했습니다. 다른 팀원들과 이야기 해보니 2차까지는 분류가 필요하다고 판단했습니다. 번개장터의 카테고리를 보면서 이런식으로 만들면 좋겠다고 생각했습니다. 최대한 js를 안쓰로 thyemleaf만 가지고 화면을 만들어봤습니다. 이런식으로 카테고리를 나누었습니다. 결과화면입니다! 지금 모양이좀 이상하지만 나중에 bootstrap으로 다듬을 예정입니다. 1차, 2차 카테고리로 나누어서 string을 보내면 안되는가? 하나의 form에다가 모든 카테고리를 th:name으로 value값을 설정해봤습니다. (html에서 controller로 정보를 넘기고 싶을때) select문을 넣고 하나 고를 때마다 모든 1차 카테고리가 동시.. 이전 1 2 3 4 5 다음