본문 바로가기
반응형

IT/Java313

[JPA] 일부 컬럼만 가져오기 JPA에서 findBy 명령어를 사용하여 entity 를 가져오곤 한다. 자세한 내용은 아래 참고 포스팅 참고 바란다. 만약 entity 에 컬럼이 10개면 10개 컬럼 모두 가져오고 불필요한 컬럼들을 모두 가져오는 경우가 있다. 필요한 컬럼만 가져오는 방법에 대해서 다루려고 한다. 기존 로직은 아래와같다. List findAll(); ///////////////// @Entity public class TestEntity{ @Id public String id; public String name; public String addr; ... } 여기서 id와 name만을 가져오고 싶다면? 필요한 컬럼들만 interface로 다시 만들어준다. public interface TestInterface{ Str.. 2024. 2. 14.
[JPA] Could not set field value [POST_INSERT_INDICATOR] value by reflection 에러 이전 포스팅에서 JPA 복합키 관련 포스팅을 다룬 글이 있다. 자세한 내용은 아래 참고 포스팅 참고 바란다. 복합키를 사용하고 서비스를 실행하는데 제목과 같은 에러가 나왔다. Could not set field value [POST_INSERT_INDICATOR] value by reflection 해결 방법은 PkId Class에 있는 동일한 컬럼들에 대해서도 @Column annotation을 적어줘야한다. 풀어서 설명하면 Dto 에는 pk 컬럼과 아닌 컬럼들을 모두 명시해줬고 PkId Class에는 pk인 컬럼들만 모아서 적어주었을텐데, Dto에 @Column(name ="test") 이런식으로 Column annotation을 적어줬다면 PkId Class에 있는 동일한 컬럼들에 대해서도 @Col.. 2024. 2. 13.
[JPA] ConverterNotFoundException: No converter found capable of converting from type 에러 native query 사용 중 select 결과에 대한 조회를 해와야하는데 org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.springframework.data.jpa.repository.query.AbstractJpaQuery$TupleConverter$TupleBackedMap] to type 이런 오류를 만났다. 찾아보니 매핑이 정상적으로 이루어지지 않은 문제였고, dto/entity 를 class가 아닌 interface로 생성하니 해결 되었다. AsIs @Data public class TestDto { String id; String.. 2024. 2. 12.
[Lombok] @Slf4j 사용법 (LoggerFactory 대신) 자바에서 log 찍는 방법에 대해서는 다양하게 있다. 참고포스팅에 log 와 lombok 에 관한 글을 읽고 오면 더욱 도움이 될것이다. lombok에서는 DTO 에 대한 기능 뿐 아니라 log 에 대해서도 제공하는 기능이 있는데 @Slf4j 이다. class단위에 annotation으로 설정할수 있고 사용 예시는 아래와 같다. LoggerFactory 를 이용하는 방법 public class JpaService { private final Logger log = LoggerFactory.getLogger(getClass()); public String testJpa(String id) { log.info("test"); .. 이하 생략 @Slf4j 를 이용하는 방법 @Slf4j public class .. 2024. 2. 8.
[JPA] save 시 select 쿼리 발생 (Persistable 의 isNew 사용) 이전 포스팅에서 dirty checking 관련해서 글을 다룬적이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 엔티티를 가지고 작업을 하게 될 경우 매번 select 을 하고 update를 하거나 insert 를 할때 더티 체킹을 한다면 만약 bulk insert를 jpa에서 하게 될 경우엔 어떻게 해야할까? 별도의 작업이 없이 읽어서 insert를 하기만 하면된다. 코드는 아래와 같이 간단하다. TestTable ent = TestTable.builder() .id(id) .nameValue("test") .gender(1) .build(); repo.save(ent); 이대로 실행을 하면 [interceptor] requestURI : /test/entitysetnew Hibernate: .. 2024. 2. 7.
컴파일 vs 런타임 (application.yml / application.properties 로드 시점) 컴파일과 런타임의 차이에 대해 다루면서 스프링 설정 파일인 application.yml / application.properties 의 로드시점에 대해서 적어볼 것이다. 이전 포스팅에서 컴파일과 런타임에 대해서는 아니지만 언급된 포스팅이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 컴파일 타임 우리가 작성한 소스코드가 컴파일 이라는 과정을 통해 기계가 읽을수 있는 형태로 변환이 된다. 이 과정이 컴파일 타임이다. 런타임 컴파일 타임 이후 프로그램이 동작 되어지는 때를 말한다. 대표적인 오류로는 컴파일타임 - 신택스, 오류타입체크 런타임 - 0나누기, 널(Null)참조, 메모리 부족 등이 있다. application.yml / application.properties 로드 시점 로드는 컴파일이 .. 2024. 2. 6.
GROUP BY 절 SORT 제거 방법(no_use_hash_aggregation)/hash group by 이전 포스팅에서 sort 튜닝이 일어나는 케이스에 대해 다룬 글이 있다. 자세한 내용은 아래 참고 포스팅을 참고 바란다. 케이스 중 하나가 Group By 절이 들어갈 경우 sort 연산이 발생한다. Oracle 10g 부터는 Group By 절에서 sort 튜닝이 발생하지 않게 할수 있다고 한다. 바로 힌트를 사용하면 된다. Hash Group by는 기존의 정렬을 사용하는 Sort Group By보다 성능이 뛰어난 대신에 Hash 함수를 사용하기 때문에 결과 집합에 대해 정렬된 순서를 보장하지 않는다. 참고 포스팅 https://thenicesj.tistory.com/798 소트 튜닝 (sort 오퍼레이션) SQL 수행 중 Sort 가 필요한 경우 dbms는 정해진 메모리 공간에 sort area 를.. 2024. 2. 5.
[Error] getId 관련 StackOverflowError JPA를 사용하면서 Persist 를 상속받아서 Entity Class를 하나 만들었다. getId 메서드를 오버라이드 받으며 만들었고, boot 를 run 띄우니 StackOverflowError 에러가 발생하였다. overflow 를 보자마자 재귀 호출이 의심이 되었고, entity 를 보니 private String id; 라는 항목이 존재하였다. 그리고 아래에 .. .. private Long getId() { return this.getId(); } 가 있었다. 실수이긴 하지만 재귀 호출을 하고있었다. .. .. private Long getId() { return id(); } getter 사용시 주의하도록 하자. 2024. 2. 1.
Java jdbc사용(executeQuery, executeUpdate, ResultSet, Connection, PreparedStatement) jdbc 에 대한 내용은 아래 참고 포스팅 참고 바란다. 이번 포스팅에서는 java 에서 간단히 사용할 jdbc 코드 예제를 적어둘 것이다. import java.sql.*; public class TEST { public static void main(String[] args){ Connection con = null; ResultSet rs = null; PreparedStatement psmt = null; //JDBC 연결 관련 //JDBC 연결 관련 //JDBC 연결 관련 //JDBC 연결 관련 //JDBC 연결 관련 try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:15.. 2024. 1. 31.
반응형