분류 전체보기(250)
-
JPA의 데이터 타입 - 값 타입, 엔티티 타입(4)
값 타입의 비교 값 타입은 인스턴스가 달라도 그 안에 값이 같으면 같은 것으로 봐야 한다.. int a = 10; int b = 10; 둘은 a == b 가 true지만 객체의 비교는 참조값으로 하므로 false이다(당연..) 동일성 비교: 인스턴스 참조 값을 비교(==) 동등성 비교: 인스턴스 값을 비교(equals) 값 타입은 동등성 비교를 해야 한다. 값타입의 equals()메소드를 적절하게 재정의해야 한다. equals()의 기본 방식은 ==이기 때문이다. 인텔리제이가 뿌려주는..equals()를 받아 쓰면 되겠다. equals()를 오버라이딩 할 때는 hashCode()도 마찬가지로 구현해야 HashMap등 컬렉션에서 효율적으로 사용할 수 있다. 쉬운 내용이라 포스팅하기 민망하지만.. 포스팅 주..
2022.03.26 -
JPA의 데이터 타입 - 값 타입, 엔티티 타입(3)
값타입과 불변객체 값 타입은 복잡하고 어지러운 객체세상을 조금이라도 단순화하기위해 사용한다. 임베디드 타입 같은 값타입은 여러 엔티티에서 공유가 가능하다. 임베디드 타입은 값 타입임에도 불구하고, 임베디드 타입의 값을 변경하면 이를 공유하고 있는 여러 엔티티에서 전부 값이 변경된다. 첫번째 멤버의 embedded 타입인 도시를 변경하였는데 업데이트 쿼리는 두번 전송된다. Address address = new Address("Seoul", "mapo", "100"); Member member1 = new Member(); member1.setUsername("Kim"); member1.setHomeAddress(address); em.persist(member1); Member member2 = new ..
2022.03.26 -
JPA의 데이터 타입 - 값 타입, 엔티티 타입(2)
2-1) 기본 값 타입(primitive) - 이전 포스팅 참고 2-2) 임베디드 타입 임베디드 타입을 활용하면 새로운 값 타입을 직접 정의할 수 있다!! int, String과 같은 값 타입이다. 주로 기본 값 타입을 모아 만들어서 복합 값 타입이라고도 한다. ex) 회원 엔티티는 이름, 근무시작일, 근무 종료일, 주소 도시, 주소 번지, 주소 우편번호를 갖는다고 하자. 이 엔티티를 보면 근무 시작일-종료일 // 주소(도시, 번지, 우편번호) 묶고싶다는 생각이 들 것이다. 변경하면 회원 엔티티는 이름, 근무 기간, 집 주소를 갖는다. 임베디드 타입을 사용하면 이렇게 묶어낼 수 있다. private LocalDateTime startDate; private LocalDateTime endDate; pri..
2022.03.26 -
JPA의 데이터 타입 - 값 타입, 엔티티 타입(1)
jpa는 데이터 타입을 두가지로 분류한다. 1) 엔티티 타입 -@Entity로 정의하는 클래스 객체 -데이터가 변해도 식별자로 지속해서 추적이 가능하다. ex) 회원 엔티티의 키, 나이 값이 변경해도 식별자의 값으로 인식 가능하다. 2) 값 타입 - int, integer, string처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고, 값만 있으므로 변경 시 당연히 추적 불가능하다. 숫자 100을 200으로 변경하면 완전히 다른값으로 대체된다.. 값 타입은 크게 세가지로 분류된다. 2-1) 기본값 타입: primitive type이라고 생각하면 쉽다. 자바가 기본적으로 제공하는 기본타입, 래퍼클래스, String등이 여기에 해당한다. 생명주기는 당연히 엔티티에 의존한다. 회원엔티티를..
2022.03.26 -
RedirectAttributes
게시판 내용을 작성한 후, post 메서드로 폼 태그를 전송하면 게시판 리스트로 리다이렉트하도록 코드를 작성하였다. @PostMapping("/write") public String write(BoardDto boardDto, HttpSession session, Model m, RedirectAttributes rattr) { String writer = (String) session.getAttribute("id"); boardDto.setWriter(writer); try { int rowCnt = boardService.write(boardDto); if(rowCnt != 1) throw new Exception("Write failed"); rattr.addFlashAttribute("msg",..
2022.03.26 -
@Transactional
@Transactional @Transactional이 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 DB에 commit 혹은 rollback을 진행해준다. RuntimeException(UnCheckedException) 발생 시 rollback된다. 어째서 UnCheckedException일 때 rollback 되는지 검색해본 결과, 스프링의 예외 전략은 UnCheckedException라는 사실을 발견했다. 개발자가 코드로 처리 불가능한 SQLException, IOException 등의 자바 초기에 구현된 클래스가 던지는 CheckedException은 DataAccessException와 같은 UnchekcedException으로 포장해준다. 런타임에 해결이 불가능한 ..
2022.03.02