본문 바로가기

전체 글144

[error] dangling quantifier '+' error in java 프로젝트를 하다 문자열을 슬라이싱해서 사용해야 할 일이 생겨 String의 split 메소드를 이용하여 문자열을 나누는 작업을 진행하였다. 그러나 "+"를 바로 split()안에 delimiter로 넣어버리면 +를 문자열로 인식하지 않고 제목과 같은 오류가 발생하였다. 해결법은 +앞에 역슬래시를 2개 넣어주면 오류는 해결된다. 2022. 8. 11.
[JDBC Template] JDBC Template query()와 queryForObject() 프로젝트를 진행하다가 JDBC Template을 이용해야 하는 일이 생겼다. 평소에 JDBC Template은 사용하지 않았던 터라 모든 것이 낯설었지만, 그래봤자 CRUD 아니겠는가.... 배우면서 진행하였다. 그 중에서도 오늘 비슷하면서도 다른 query()와 queryForObject()에 대해 기록해 두려한다. 1. queryForObject (String sql, new RowMapper,?에 넣어줄 파라미터) - 단건 조회 시 사용 2. query(String sql, new RowMapper, ?에 넣어줄 파라미터) - 복수건 조회 시 사용 2개의 메서드를 살펴보면 메서드명만 다를 뿐 넣어주는 변수도 모두 동일하고, 비슷한 점이 많다. 정리 일단 모두 db select가 필요할 때 사용하게 .. 2022. 8. 9.
[JPA] JPA 복합키 매핑 정리 JPA 프로젝트를 하다가 복합키를 매핑해야하는 일이 생겼다. 근데 이 복합키는 간단한 2개의 필드에 선언하는 것이 아닌, 연관관계에 맞물려 있는 필드 였고, 이 문제를 해결하기 위해서 JPA 복합키에 대한 내용을 구글에 검색하던 중 어떤 사람은 @Id 와 @MapsId를 같이 사용하고, 어떤 사람은 각각 @Id 만을 사용하는 예제를 보았고, 어떤사람은 extends Serialize를 엔티티와 엔티티 id클래스에 모두 적용하는 사람이 있었고, entitiy Id 클래스에만 적용하는 사람이 있었다. 그래서 복합키 매핑을 할 때 어떤 것이 맞는지, 또는 어떤 방법으로 해야하는지 혼란이 왔다. 그러다 어떠한 글을 보고 깨달음을 얻어 이렇게 정리한 내용을 남기려고한다. 일단 복합키를 선언하기 위한 조건들이 4가.. 2022. 8. 9.
[error] javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 오류 JPA querydsl 강의를 진행하면서 test코드를 작성해야 하는 부분이 있었다. 분명 강사님과 같은 코드를 짰는데 나는 제목과 같은 오류가 발생했다. 구글링을 통해 원인을 찾아보니 JPA 자체는 트랜잭션을 기반으로 작동하기 때문에 발생하는 오류였다. 트랜잭션이 유지되는 동안에는 영속성 콘텍스트라고 불리우는 1차 캐시에 엔티티정보가 저장되는데, 트랜잭션이 선언되지 않아 Persist가 진행이 안되는 것 이었던 것 같다. 아무튼 테스트 코드에 @Transactional을 추가해주었더니 바로 해결이 되었다. 2022. 7. 27.
[JPA] 연관관계 매핑[실무] JPA를 사용하는 프로젝트에서 연관관계 매핑을 해야하는 일이 생겼다. JPA강의를 들을 때만해도 굉장히 쉬웠고, 포트폴리오를 작성할 때도 간단하게 넘어갔던 부분이었는데, 그새 다 까먹은건지 실무에 와서 조금 삽질을 한 것 같아 나중을 위해 적어두고 계속해서 수정해나가고자 한다. 1. 연관관계 매핑 1:N 이번 프로젝트에서 1:N 관계로 진행되는 경우가 많았고, 또 양방향으로 할지 단방향으로 할지 굉장히 혼란스러웠다. 삽질없이 단순 심플하게 진행하고 싶다면 단방향 관계로 진행할 것을 추천한다. 단방향관계는 굉장히 쉽다. FK를 가지고 있는 연관관계의 주인 필드에 @ManyToOne과 @JoinColumn을 설정해주면 된다. 양방향 관계는 별로 추천하지 않는다. 그래도 굳이 넣어야한다고 한다면 컬렉션내부에는.. 2022. 7. 26.
[JPA] JPA로 다른 스키마에 있는 테이블에 쿼리 날리기(with mysql) JPA를 이용한 프로젝트를 진행하면서 외부에 있는 테이블에서 데이터를 조회하거나 외부테이블과 내부테이블을 같이 조인하여 데이터를 조회해야 하는 경우가 생겼다. 모든 경우가 이 방법으로 해결 되지 않겠지만, 매우 간단한 방법으로 다른 스키마에 있는 테이블에 있는 데이터를 조회할 수 있는 방법을 소개해보고자 한다. 1. @Table 의 기능을 이용하면 굉장히 간단하게 다른 스키마에 있는 데이터를 조회하거나 수정할 수 있다. 바로바로~~~ @Table( catalog = "`외부스키마명`") 이것이다. 꼭 " " 큰따옴표 안에 백틱을 넣어줘야 한다. 백틱을 넣어주지 않는 다면 mysql 문법이 맞지 않아 조회가 되지 않는다. 위의 @Table 설정을 자기가 조회하고자하는 외부 테이블의 엔티티에 선언해주고 조회.. 2022. 7. 25.
[JPA] Spring Data JPA를 이용한 JPA Auditing 날짜 자동 생성, 저장(Auditing in JPA ). 1. 아래와 같은 코드를 클래스에 선언해서 클래스를 작성 @EntityListeners(AuditingEntityListener.class) @Getter @MappedSuperclass 2. 날짜 같은 경우는 아래와 같은 코드를 작성하면 완료 된다. @CreateBy 같은경우는 더 설정해주어야 할 것이 남음. @CreatedDate @Column(updatable = false) private LocalDateTime createDate; @CreatedBy @Column(updatable = false) private String CreateUser; @LastModifiedDate private LocalDateTime lastModDate; @LastModifiedBy private String .. 2022. 7. 25.
[Spring Batch] Duplicate entry '0' for key 'PRIMARY' 오류 h2 db에서 테스트할 때는 잘만 실행되던 배치잡이 mysql로 db를 변경하여 실행 했더니 처음에만 정상적으로 실행이 되고, 2번째 배치잡 작업부터는 제목과 같은 오류가 발생했다. 알고보니 배치잡 테이블을 생성할때 create문을 통해 메타 테이블만 만들어지고 아래와 같은 기본적으로 들어가야 하는 데이터들 즉 seq값이 입력이 안되었던 것이다. INSERT INTO BATCH_STEP_EXECUTION_SEQ values(0, '0'); INSERT INTO BATCH_JOB_EXECUTION_SEQ values(0, '0'); INSERT INTO BATCH_JOB_SEQ values(0, '0'); 이렇게 insert 문을 수동으로 실행해주니 그 이후로 부터는 batchjob이 아무런 이상 없이 정.. 2022. 7. 22.
[Spring boot]String을 LocalDateTime 으로 변환하는 법 예제 데이터 2018-07-04T11:21:35+09:00 api에서 String의 형식으로 위와 같은 데이터를 받아와 LocalDateTime 타입의 변수에 저장해야 할 일이 생겼다. DatetimeFormatter가 제공하는 여러가지 formatter 타입이 있다. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'+09:00'"); ofPattern안에 문자열의 형태로 넣어주면 저게 받는 데이터타입의 포맷이 된다. 문자열의 안에 알파벳을 통해 여러가지를 정의 할 수 있다. G 연대 (BC, AD) y/Y 년도 M/L 월 (1~12 또는 1월~12월) Q/q 분기(quarter) w 년의 몇 번째 주 (1~.. 2022. 7. 22.