| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 운동해서 광명찾자
- yml
- mysql equal null
- NamedEntityGraph
- 버전 문자열 비교
- +9:00
- 오블완
- createEntityGraph
- jdbc utf8mb4
- 티스토리챌린지
- 1*1000
- spring boot
- java jdbc utf8mb4 연결 오류
- getDateCellValue
- sendFractionalSeconds
- https
- mysql not equal null
- load order
- Protecle
- getEntityGraph
- apatch poi
- mysql =
- RootGraph
- 운영체제별 차이
- AuditingEntityListener
- fractional seconds
- MSSQL
- MYSQL
- jdbc characterencoding utf8mb4
- mysql8업그레이드
- Today
- Total
목록java (24)
Hello
아래구조와 동일한 객체 조회 시 lazy 로 동작해 n+1이 발생했다. 특정 쿼리문에서만 join을 사용해 관련된 테이블을 모두 조회해야할 필요가 있어, EntityGraph를 사용해 해결한 방법을 정리하고자 글을 작성합니다. 어떤 게임에서 건축물을 지을 때 해당 건축물은 여러 옵션을 갖고 있다. 건축물은 옵션을 가지며, 옵션은 실제 효과를 여러개 가질 수 있다. 옵션과 효과 객체를 n:m 매핑 테이블을 만들어 사용이 필요하다. Building 조회시 Option, OptionEffect, Effect를 가진 join 쿼리 적용 방법 @NamedEntityGraph 정의 @Entity @Table(name = "tb_building") @NamedEntityGraph(name = "building.opt..
유니크 컬럼에 중복값을 넣으려고 할 때, DataIntegrityViolationException이 발생해 db호출이 일어나는 메소드에서 Exception을 잡아 IllegalArgumentException으로 감싸 넘기려고 했는데 캐치 되지 않고 해당 에러가 리턴되었다. @Transactional public void addMemberPhone(MemberPhoneRequest memberPhone) { MemberPhone memberPhone = new MemberPhone(); ... try{ memberPhoneRepo.save(memberPhone); }catch (DataIntegrityViolationException e){ throw new IllegalArgumentException("..
@ManyToOne 관계 매핑 시 연관 테이블의 PK가 아닌 컬럼으로 관계 매핑 설정 시 ClassCastException이 발생하게 됩니다. 에러 내용을 보면 해결 방법이 나와 있어 문제 해결 하는 방법은 간단 합니다. 연관된 엔티티 객체가 Serializable를 구현하는 것 입니다. java.lang.ClassCastException: com.example.demo.ServerInfoEntity cannot be cast to java.io.Serializable 예시 테이블을 사용해 방법과 이유에 대해 간략히 설명합니다. FK 컬럼 조인 방법 @JoinColumn 조인할 컬럼명 referencedColumnName 명시 연관 엔티티 객체가 Serializable 구현 @Entity @Table(n..
자바에서 점으로된 문자열 비교해 소팅이 필요한 경우가 생겨 maven-artifact 라이브러리를 사용한 내용을 정리하려고 합니다. maven denpendency org.apache.maven maven-artifact 3.9.6 version compare test code public class VersionCompareTest { @Test void version_compare_test() { List list = new ArrayList(); for (int i = 0; i < 100; i++) { Test1 test1 = new Test1(); test1.setSeq(i + 1000); test1.setName("slot" + i); test1.setVersion((i / 50) + "." +..
Auditing는 '감사하다' 의미를 갖고 있습니다. 엔티티의 시간 데이터가 변경돨 때마다 입력/수정 코드를 구현해야한다. 하지만, JPA Auditing를 사용해 공통으로 처리할 수 있습니다. 1. 표준 JPA를 사용해 구현하는 방법 2. Spring Data JPA를 사용해 구현하는 방법 표준 JPA를 사용 JPA에는 Auditing(감사) API가 명시적으로 포함되어 있지 않지만, 엔터티 수명 주기 이벤트를 사용하여 이 기능을 구현할 수 있습니다. + https://www.baeldung.com/jpa-entity-lifecycle-events @PrePersist, @PreUpdate 등 jpa 엔티티 수명 주기 이벤트를 목적에 맞게 사용할 수 있습니다. 콜백 메서드는 항상 void를 반환해야 하..
ajax 통신 할 때 json 구조를 사용하는 경우가 자주 있다 이때, string to enum, string to date, number to boolean 등 데이터 타입 변환이 필요한 경우가 있습니다. 이 때 상황에 따라 개발자는 custon serializer, deserializer를 작성해서 사용할 수 있습니다. pom.xml com.fasterxml.jackson.core jackson-databind 아래 abstract class를 구현해 사용할 수 있습니다. com.fasterxml.jackson.databind.JsonSerializer com.fasterxml.jackson.databind.JsonDeserializer number to boolean 예시 Serializer im..
Java8 기준 MultipartFile을 받아 InputStream으로 문자열로 변환하는 방법을 정리 1. InputStream의 read()를 사용해 문자열로 변환하는 방법 -available() 현재 읽을 수 있는 바이트 수 -read(byte[]) byte[]만큼의 데이터를 읽어서 매개변수에 저장하고 읽은 바이트 수 반환 private String readFileToContents(MultipartFile file) throws IOException { try (InputStream is = file.getInputStream()) { byte[] buf = new byte[is.available()]; int read = is.read(buf); return new String(buf, 0, r..
서킷 브레이커 란 예상치 못한 장애(네크워크 이슈, 서버 다운 등)가 발생해 어떤 원격 서버 하나가 요청에 응답하지 못하는 상태일 때 클라이언트는 Timeout이 될 때 까지 응답을 기다리거나 무의미한 요청을 보내며 자원을 낭비하게 될 것입니다. MSA(Microservice Architecture)에서는 이 클라이언트가 또 다른 누군가의 서버가 될 수도 있는데요. 그렇다면 이 서버의 클라이언트 역시 똑같은 문제를 겪게 될 것입니다. 이렇게 장애가 계속 전파되며 한 원격 서버에서 발생한 장애가 모든 시스템에 큰 영향을 줄 수 있습니다. 이런 문제를 해결하기 위해 등장한 개념이 바로 '서킷 브레이커(circuit breaker)'입니다. 서킷 브레이커 패턴은 Michael Nygard의 저서 Release..
@Embeddable, @EmbeddedId를 사용해 일대일 조인테이블 Entity 만드는 방법을 간단하게 정리합니다. @Entity public class Buff { @Id @GeneratedValue private Integer id; private Integer type; private Integer value; } @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; } @Entity public class BuffUser { @EmbeddedId private BuffUserPk id; @MapsId("userId") @ManyToOne @JoinColumn(name ..
GenerationType.enum JPA는 기본키 생성 전략의 타입을 정의한 enum을 제공합니다. AUTO(default) JPA 제공자가 DB에 대해 적절한 전략을 선택 IDENTITY 데이터베이스 auto-increment 의존 JPA는 insert를 수행한 후 또는 트랜잭션 커밋 시 기본 키 값을 할당 MySQL, SQL Server, PostgreSQL, DB2, Derby, Sybase 지원 SEQUENCE 데이터베이스 SEQUENCE 를 사용해 기본키 생성 트랜잭션 커밋 되고 EntityManager.persist() 호출 후에 기본키를 생성 Oracle, PostgreSQL, DB2 지원 TABLE 키 생성 관리 테이블을 만들어서 SEQUENCE처럼 사용 EntityManager.pers..