분류 전체보기

@GetMapping("/members") public Page list(Pageable pageable){ Page page = memberRepository.findAll(pageable); return page; } 파리미터로 Pageable을 받아서 필터링된 데이터를 가져올 수 있음 토탈 몇페이지냐 현제 몇페이지고 페이지당 사이즈가 몇이고 각종 메타정보가 싸그리 보내짐 아무것도 설정안하면 한페이지에 20개씩 가져옴 전역설정 변경해서 10개만 가져올 수 도 있음 몰론 전역 설정도 가능함 @GetMapping("/members") public Page list(@PageableDefault(size = 5, sort = "username") Pageable pageable){ Page page = m..
package stduy.datajpa.entity; import lombok.*; import javax.persistence.*; @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username", "age"}) @NamedQuery( name="Member.findByUsername", query="select m from Member m where m.username = :username" ) @NamedEntityGraph(name="Member.all", attributeNodes = @NamedAttributeNode("team")) public class Membe..
public class JpaBaseEntity { @Column(updatable = false) private LocalDateTime createdDate; private LocalDateTime updatedDate; @PrePersist public void prePersist() { LocalDateTime now = LocalDateTime.now(); createdDate = now; updatedDate = now; } } 데이터 입력시간, 수정시간과 같은 컬럼은 사용자가 직접입력하지 않는다. 자동으로 입력하게 만들어두는데 그때 사용하는것이 @PrePersist 어노테이션이다. PrePersist라는 말과 같이 말그대로 persist하기전에 처리하는 코드이다. 즉 데이터를 넣고 persi..
public class JpaBaseEntity { @Column(updatable = false) private LocalDateTime createdDate; private LocalDateTime updatedDate; } 막고 싶은 컬럼에 @Column(updatable = false)을 붙여주면 된다.
인터페이스의 상속 인터페이스의 조상은 인터페이스만 가능 다중 상속이 가능 인터페이스는 위와 같은 속성을 가지고 있다는 것을 알아야한다. 사용자 정의 리포지토리를 구현하는 이유는 JPA 직접 사용( EntityManager ) 스프링 JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접 사용 등등... Querydsl 사용 등을 하기 위해서이다. JPA repository는 인터페이스다. 즉 인터페이스가 제공하는 기능만을 사용할 수 있다. 하지만 JPA repository에 기능을 추가하려면? 기능을 추가한 JPA repository를 다 만들어야한다. (인터페이스이기 때문에) 따라서 JPA repository를 다 만든다는 것은 너무나 방대한 일이기때문에 불가능하다. 따라서 JPA ..
@Test public void queryHint() { //given Member member1 = memberRepository.save(new Member("member1", 10)); em.flush(); em.clear(); //when Member findMember = memberRepository.findById(member1.getId()).get(); findMember.setUsername("member2"); em.flush(); } 해당 테스트의 경우 member1의 이름을 member2로 바꾸는 테스트이다. member1을 영속성 컨텍스트의 1차캐시에 담고 스냅샷에 현재의 상태를 저장해둔다 이후 username을 바꾸게되면 스냅샷과 1차캐시의 값이 다른 것을 인지하게되고 quer..
보통 연관관계를 lazy로 해두는데 이렇게 해두면 team에 접근할때마다 sql이 나가기 때문에 좋지 않다. 그렇다고 연관관계를 eager로 해버리면 굳이 team의 정보가 필요하지 않을때도 데이터를 가져오기때문에 lazy로 하되 필요한곳은 fetch 조인을 통해 데이터를 가져오는 것이 좋다, fetch join의 예시이다. @Query("select m from Member m left join fetch m.team") List findMemberFetchJoin(); JPQL을 쓰기 싫고 JPA repository를 오버라이드 해서 쓰고 싶으면 아래와 같이 쓰면 된다. @Override @EntityGraph(attributePaths = {"team"}) List findAll(); 기존 JPQL..
@Modifying @Query("update Member m set m.age = m.age + 1 where m.age >= :age") int bulkAgePlus(@Param("age") int age); @Modifying 어노테이션을 넣어야 .executeUpdate(); 같은 메소드가 동작함 @Modifying 어노테이션에 들어가면 다음과 같은 설명을 볼 수 있음 데이터를 변경하는 쿼리임을 알려주는 어노테이션이라고 설명하고 있다. Indicates a query method should be considered as modifying query as that changes the way it needs to be executed. This annotation is only considered..
키보드발
'분류 전체보기' 카테고리의 글 목록 (10 Page)