목록웹개발/Jpa (20)
써먹는 웹개발
1 2 3 4 5 6 @Transactional(readOnly = true) // 읽기 전용 트랜잭션 public List findDatas() { return em.createQuery("select d from DataEntity d", DataEntity.class) .setHint("org.hiberanate.readOnly", true) // 읽기 전용 쿼리 힌트 .getResultList(); } Colored by Color Scripter cs 1) 읽기 전용 트랜잭션 사용 : 플러시를 작동하지 않도록 해서 성능 향상 2) 읽기 전용 엔티티 사용 : 엔티티를 읽기 전용으로 조회해서 메모리 절약 출처 : [책] 자바 ORM 표준 JPA 프로그래밍 - 684 page
1. JPA : 자바 어플리케이션에서 관계형 데이터베이스(DB)를 사용하는 방식을 정의한 인터페이스 - Java Persistence API의 약자 2. Hibernate : JPA 명세의 구현체(중 하나) - JPA는 Hibernate 외에도 다른 구현체를 사용 가능 - JPA와 Hibernate는 Interface와 해당 interface를 구현한 class와 같은 관계 ex) 데이터 crud(save, find, update, delete) - JPA를 사용하기 위해서 반드시 Hibernate를 사용할 필요가 없다. ※ 비유를 한다면 JPA는 키보드 자판이고, Hibernate는 한글 자판이다. 키보드를 사용하기 위해서 반드시 한글 자판을 사용할 필요는 없지만 제일 많이 쓰기에 한글 자판을 사용한다..
2021-12-23 @DynamicUpdate 2021-12-22 - insertable과 updatable을 쓰면 쓸수록 좋음 Jpa에서 처음 save 시도할때 난감한 현상이 발생된다. 그것은 바로 컬럼을 명시하지 않으면 null값으로 덮어쓰는 현상인데 잘 모를때는 기존의 컬럼값을 불러와서 덮어썼는데 그렇게 하지 않아도 해결할 수 있는 방법이 있었다. 방법은 model 컬럼위에 insertable(updatable) 옵션을 주는 것 주로 쓰는 방법을 예로 들며 마치겠다. - 설명 : 등록일자는 데이터 추가할때만 값을 입력하고, 수정할때는 값을 입력하지 않는다. 1 2 3 4 @Column(insertable=true, updatable=false) private String regDate; @Colum..
아무리 Mysql로 돌려봐도 객체명을 테이블명으로 바꿔서 했는데도 해결이 안되서 결국에는 createNativeQuery로 테이블 호출했더니 해결되었습니다. 더 좋은 방법이 있을때 댓글로 남겨주시면 감사하겠습니다.
에러 메세지 : 'nested exception is org.hibernate.InstantiationException: No default constructor for entity' JPA에서 Entity는 기본 생성자를 가지고 있어야 한다는 제약조건이 있는 듯 하다 기본생성자를 생성하거나 @NoArgsConstructor을 추가하면 해결된다. + @NoArgsConstructor 작성시 @Builder에서 오류가 날 수 있는데, @AllArgsContructor을 쓰면 해결된다. ※ 출처 : https://catchdream.tistory.com/128
Spring Data 프로젝트 하위에 Spring Data JPA가 존재 JPA를 쉽게 사용할 수 있도록 제공해주는 프로젝트이다. 쉽게 사용할 수 있다의 의미? - 대개 DB관련 로직이 있는 데이터 계층에 select, insert, update, delete와 같은 코드를 반복적으로 작성한다. Spring Data JPA에서는 이런 지루하고 반복적인 작업을 인터페이스 선언만으로 해결하였다. JpaRepository 인터페이스를 상속하면 된다. 인터페이스만 선언해서 어떻게 해결했지? 라는 의문점이 들 수 있을 것이다. Spring Data JPA에서는 런타임 시점에 구현 객체를 동적으로 생성해준다. (JDK Dynamic Proxy 이용) 1 2 public interface EXAMRepository ..
1. Top 1건만 출력 - 정렬 X : findTop1() - 정렬 O : findTop1ByOrderByVersionDesc()