
공통 매핑 정보가 필요할 때 사용(id, name) 같은 정보가 계속 반복될 때 속성만 공통으로 사용하는 것 @MappedSuperclass public abstract class BaseEntity { private String createdBy; private LocalDateTime createdDate; private String modifiedBy; private LocalDateTime modifiedDate; } public class Member extend BaseEntity { } 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity)불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스 ..

단방향 연관관계 객체지향 모델링 하나의 팀이 여러 개의 멤버를 가질 때 보통 Member에서 team_id를 갖고 있는 설계를 많이 하게된다. 하지만 객체지향에서는 외래키 대신 객체 자체를 들고 있는 형태가 되어야 한다. 그래서 위와 같은 내용으로 Member쪽에 이렇게 설정을 해야한다. @Entity public class Member { 중략.. @ManyToOne(fetch = FetchType.LAZY) //Member, Team 관계를 나타내는 다:1(N:1) @JoinColumn(name = "TEAM_ID") private Team team; } 이런식으로 단방향 매핑을 한 뒤에 member를 find 할 경우 매핑된 Team의 정보까지 같이 join되어 불러온다. Member findMem..
@Entity public class Member { @Id private Long id; private String name; } 위와 같이 작성을 할 경우 JPA에서 자동으로 DDL을 애플리케이션 실행 시점에 생성해준다. 이렇게 만들 경우 4가지 옵션으로 사용이 가능하다. ddl-auto : create, update, validate, none 옵션 설명 create 기존 테이블 삭제 후 다시 생성 update 변경분만 반영 validate 엔티티와 테이블이 정상 매핑되었는지만 확인 none 사용하지 않음 개발 환경(로컬)에서는 create나 update를 사용해도 되나, 스테이징과 운영에서는 절대 사용해선 안된다. 스테이징과 운영은 validate, none을 권장 왜냐하면 create는 데이터 ..
플러시 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영 영속성 컨텍스트를 플러시 하는 방법 em.flush() -> 직접호출 트랜잭션 커밋, JPQL 쿼리 실행 -> 플러시 자동 실행 직접 호출할 땐 영속성 컨텍스트를 비우지 않음 영속 컨텍스트 내 '쓰기 지연 SQL 저장소' 의 내용만 미리 반영됨, 영속성 컨텍스트를 비우지 않 준영속 영속 > 준영속 이므로 영속 상태의 엔티티가 영속성 컨텍스트에서 분리되는 것. 영속성 컨텍스트에서 제공되는 기능 사용 못함 준영속 상태로 만드는 방법 em.detach(entity) - 특정 엔티티만 준영속 전환 em.clear() - 영속성 컨텍스트를 완전히 초기화 em.close() - 영속성 컨텍스트를 종료 출처 : https://www.inflearn.com/co..
영속성 컨텍스트(entityManager) 영속성 컨텍스트는 데이터를 대신 관리해주는 JPA의 기능이라고 볼 수 있을 것 같습니다. 객체가 관리대상(영속상태)이 된다면 트랜잭션이 끝나고 insert나 update같은 기능을 대신 처리하게 해줍니다. //객체를 생성한 상태(비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 위 상태처럼 그냥 객체(member)를 생성하고 어떤 처리도 되지 않은 상태를 비영속이라 합니다. 여기서 영속 상태를 만들어주기 위해서는 아래와 같이 하면 됩니다. EntityManager em = emf.createEntityManager(); em.getTransaction().b..

안녕하세요!! 오늘은 회사 근처에 있던 뷰 맛집 카페를 소개 하려고 합니다. 매봉쪽에 양재천이 있는데 여기 가로수길을 따라서 여러 카페와 bar가 있는데 오늘은 그 중 나른한 오후에 들리면 좋을 카페를 소개해 보도록 하겠습니다. 제일 먼저 우릴 반겨주는 간판!! 미국 느낌도 나고 저는 갠적으로 시작부터 좋았네요 그리고 도보로 걷다보면 카페가 잘 안보여서.. 이걸 찾는게 더 빠를것 같네요 폴딩문으로 되어 있는 정문입니다. 제가 갔을 땐 봄이라서 이렇게 활짝 열어두었지만 쌀쌀한 날에가면 닫아둘 것 같네요ㅠ 날 따듯할때 가세요!!! 내부에 장식된 케이크인데 케이크에 프린팅해서 주는거 같더라구요 기념일에 특별한 케이크 만들고 싶을때 와도 좋을것 같습니다ㅋㅋ 무릎담요까지 세심하게 챙겨주는 곳이네요~ 메뉴는 단촐하..
무한 스크롤에서 사용되는, 스크롤이 맨 아래로 왔을 때 moreData를 호출하는 로직 $(document).ready(function(){ //window는 "#searchPopup"등 으로 스크롤 주체로 변경가능 $(window).scroll(function(){ var scrollTop = $(this).scrollTop(); var innerHeight = $(this).innerHeight(); var scrollHeight = $(this).prop('scrollHeight'); if(scrollTop + innerHeight >= scrollHeight) { moreData(); } }); }); 스크롤 주체가 어떤 영역인지 모를땐, 스크롤을 내리면서 $('#searchPopup').scro..
@Query Spring Data JPA에서는 기본적으로 JpaRepository를 통해서 제공되는 findById 같은 메서드도 있고 메서드 네이밍만을 통해서 쿼리를 실행할 수 있도록 기능을 제공, 하지만 이 방법만으로 만들 수 없는 쿼리가 있다면 쿼리를 직접 작성해야하며 그 때 커스텀 Repository의 메서드에 붙이는 어노테이션이 @Query입니다. 기본적으로 JPQL로 작성할 수 있고, nativeQuery=true 옵션으로 네이티브 쿼리도 사용 가능합니다. @Modifying @Query로 작성된 변경, 삭제 쿼리 메서드를 사용할 때 필요합니다. 주로 벌크 연산 시 사용됩니다. JPA Entity LifeCycle을 무시하고 쿼리가 실행되기 때문에 해당 어노테이션을 사용할 때는 영속성 콘텍스트..