EntityManager를 통해서 Multirow Insert를 사용하는 두 가지 방법입니다.JPA에 다음과 같은 ID 전략을 사용할때 사용하기 좋습니다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; IDENTITY 전략을 사용하면, 배치인서트가 원하는대로 동작하지 않을 가능성이 큽니다.또한 Auditing이나 외래키 등 생각하지 못한 에러가 발생하는 경우도 많습니다.그래서 EntityManager를 통해 마이그레이션 한 경험을 정리합니다. 1. NativeQuery 사용하기쿼리로만 작성하게 되면, 빈값에 대한 NULL처리를 신경써줘야 합니다.또한 '이나 "같은 문자에 들어가는 특수문자도 신경써서 ..
WITH AS 구문WITH 구문은 공통 테이블 식(Common Table Expression, CTE) 을 정의하는 데 사용된다.이는 임시적인 결과 집합을 정의하고, 이를 쿼리의 다른 부분에서 참조할 수 있게 해준다.WITH는 뷰(View)와 유사하지만, CTE는 임시적이며 쿼리 내에서만 사용가능하다.뷰와 달리 생성해주고 삭제해주지 않아도 된다. 단일 사용하기예를 들어, 다음과 같이 서브쿼리 결과를 WHERE 안에 사용하고 싶을때 사용한다.SELECT * FROM ITEM WHERE ID IN (SELECT ITEM_ID FROM ORDER ORDER BY CREATED_AT DESC LIMIT 200); 해당 쿼리는 서브쿼리에 limit 200이 들어가기 때문에 실행되지 않는다.그렇다고 ITEM을 C..
QueryDsl과 Pageable을 이용한 Sort 기능 사용법 QueryDsl에서는 Client가 제공해준 Order를 사용하는 방법이 여러가지가 있다. 그 중 다음과 같은 코드를 사용하면 복잡한 분석기능을 사용하지않고, 클라이언트가 pageable에 제공하는 sort 정보를 모두 한 코드로 사용할 수 있다. for (Sort.Order order : pageable.getSort()) { PathBuilder path = new PathBuilder(Object.class, order.getProperty()); query.where(builder).orderBy(new OrderSpecifier(com.querydsl.core.types.Order.valueOf(order.getDirection()..
Java에서 List를 Array로 변경하는 과정에서 배운 것을 기록합니다. https://www.baeldung.com/java-collection-toarray-methods 를 참고해서 작성했습니다. List 인터페이스의 toArray() Java에서는 List 인터페이스의 경우아래와 같은 toArray() 메서드를 지원합니다. Object[] toArray(); T[] toArray(T[] a); toArray() method 사용법 toArray()의 경우 List의 사이즈를 기반으로 자동으로 배열 사이즈를 만들어줍니다. 결과는 Object[]로 반환되며, 단순하게 타입 캐스팅을 할 수 없습니다. 만약 다음과 같이 코드를 작성하면 java.lang.ClassCastException가 발생합니다...
@Inherited 어노테이션이란? 설명 Java에서 사용하는 meta annotatino입니다. meta annotation은 다른 annotation을 위한 annotation을 말합니다. 목적 특정 annotation을 상속 가능(inheritable) 하도록 만들 때 사용합니다. 사용 방식 특정 annotation에 @Inherited를 추가합니다. 제한사항 클래스 수준의 annotation에만 적용 가능합니다. 메소드나 필드 수준의 annotation에는 적용되지 않습니다. 인터페이스에 사용해도 구현체에는 상속되지 않습니다. 테스트를 해보면 다음과 같다. @Inherited 예시 코드 MyInheritedAnnotation이란 커스텀 어노테이션을 만들고, @Inherited를 추가합니다. 그리고..
Unsatisfied dependency expressed through field 'objectMapper': No qualifying bean of type 'com.fasterxml.jackson.databind.ObjectMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} @WebMvcTest를 사용하는 ControllerTest에서는 @Autowired ObjectMapper를 사용했었는데, @DataJpaTest에서 같은 방법으..
MySQL의 smallint를 Java에 Entity Column과 mapping 하는 방법 다음과 같이 columnDefinition에 smallint를 추가해주시면 됩니다. @Column(name = "year", columnDefinition = "smallint") private Integer year; columnDefinition이란? columnDefinition은 엔티티의 클래스의 필드가 데이터베이스의 컬럼으로 매핑될 때 사용하는 어노테이션입니다. 주된 목적은 데이터베이스의 고유한 타입이나 제약 조건을 지정할 때 유용합니다. 위에 작성한 예제처럼 Java의 Integer를 smallint과 매핑하는 경우도 가능하고 아래처럼 제약사항을 걸 수도 있습니다. @Column(name = "exam..
Intellij에서 사용하지 않는 import를 제거하려면 Ctrl+Alt+o를 매번 눌러줘야 한다. 하지만 설정을 통해 내가 작성한 File을 저장할때마다 자동으로 해당 기능을 동작시킬 수 있다. File - Settings에 들어가서 save action 이라고 검색하면, Tools 밑에 Actions on Save가 있다. 여기서 Optimize imports를 클릭하면 파일을 저장할때마다 안쓰는 import가 자동으로 삭제돼서 매우 편하다. 그 외에 다양한게 있는데 Reformat code는 코드 컨밴션 파일과 함께 사용하면, 개인 또는 회사에서 지정한 코드 컨밴션에 맞게 수정해 준다. 이것역시 Ctrl+Alt+L을 통해서 매번 수동으로 했었는데, 이젠 자동변환 해준다. 코드 컨벤션을 지정하는 방..
MySQL에 테이블을 만들고 auto increment를 설정하고 jpa를 연결하려고 했는데 다음과 같은 오류가 발생함. 나는 시퀀스를 쓴적도 없고 mysql은 시퀀스가 없다고 들었는데 대체 저 hibernate쿼리는 무엇일까 찾아봄. 2023-11-08T13:32:38.164+09:00 INFO 19496 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms Hibernate: select next_val as id_val from users_seq for update 2023-11-08T13:32:40.045+09:00 ERROR 19496 --- [nio-8080-exec-1] o.hiber..
- Total
- Today
- Yesterday
- docker
- MySQL
- @AutoConfigureJsonTesters
- Book
- vscode
- Algorithm
- @Inherited
- multirow insert
- Chirpy
- Spring
- tomcat
- java
- c++
- deployer
- fillInStackTrace
- gradle
- Word
- Kafka
- springboot
- Kafdrop
- Review
- Intellij
- querydsl
- JPA
- 도커
- GIT
- github
- 그리디
- 캡션
- OS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |