728x90 반응형 자바51 [JPA/Java] 값 타입 3 (값 타입 컬렉션) 값 타입 컬렉션은 하나 이상의 값을 넣을 때 사용한다. 기존에 있었던 테이블 Member에 Address가 있는데, 주소에 대한 이력관리와 좋아하는 음식 정보를 넣고 싶다는 가정을 하면, 기존에 있었던 Address를 사용하여 주소 이력을 관리하기에는 한계가 있다. 또 좋아하는 음식이 여러 개라면? 여러 가지 갚을 넣어야 할 때 컬렉션을 이용해야 한다. 대략적인 설계는 아래의 그림과 같다. 그래서 컬렉션 프레임워크인 Set, List를 사용하였다, 값 타입에 컬렉션을 사용하려면.. @ElementCollection, @CollectionTable을 사용하여야 한다. 데이터베이스는 컬렉션을 Member 테이블에 컬럼을 종속시켜 같은 테이블에 저장할 수 없다. 그래서 컬렉션을 저장하기 위한 별도의 테이블이 .. 2023. 3. 13. [Java/개념] 값 비교( '==' 동등 비교 vs equals() 객체 비교) 실무에서 값 비교를 쓸 때, 객체에 대해서는 보통 equals를 많이 쓴다. 기본 타입이랑 객체 타입의 값 비교가 다르다. 기본 타입은 값을 복사한다. 그래서 '==' 과 같은 동등비교가 가능하다. int a = 10; int b = 10; System.out.println("a == b = " + (a == b)); a == b = true 객체 타입은 '==' 와 같이 동등비교를 할 때 주소 값으로 비교한다. false가 나온다. Address address1 = new Address("city", "street", "10000"); Address address2 = new Address("city", "street", "10000"); System.out.println("(address1 == ad.. 2023. 3. 8. [JPA/Java] 값 타입 2 (불변 객체) 값 타입은 복잡한 객체 세상을 조금이라도 단순화하려고 만든 개념인데, 따라서 값 타입은 단순하고 안전하게 다룰 수 있어야 한다. 예를 들어, 한 주소 객체를 선언 했는데, 선언한 주소를 두 명의 멤버에 넣고, 주소를 변경시키는 경우, 두 명의 멤버의 주소가 모두 바뀌게 된다. JpaMain.java Address address = new Address("oldHome", "oldStreet", "zipcoode"); Member member1 = new Member(); member1.setUserName("member1"); member1.setHomeAddress(address); em.persist(member1); Member member2 = new Member(); member2.setUser.. 2023. 3. 8. [JPA/Java] 값 타입 1 (기본 값, 임베디드(복합 값) 타입) JPA는 ORM 방식의 기술로 객체를 테이블에 매핑시켜서 데이터를 관리한다. 객체를 필드로 넣는다고 가정할 때, DB에 데이터를 넣을 때 필드로 넣은 객체에 종속된 필드를 테이블에 같이 넣을 수 있다. 그에 대한 설명에 앞서, JPA의 데이터 타입 분류는 아래와 같다. JPA의 데이터 타입 분류 (1) 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 지속해서 추적이 가능하다. - 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식이 가능하다. (2) 값 타입 - int, integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 - 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 한.. 2023. 3. 6. [JPA/Java] 영속성 전이 : Cascade, 고아 객체 어떤 쇼핑몰 사이트에서 주문 정보가 들어왔다. 주문 테이블 구조는 Master, Detail 2개의 테이블 구조이고, 주문 정보가 들어올 때, 주문 상세 정보가 같이 들어올 때, 데이터를 일일이 넣어주는 소스를 넣는 것은 개발자 입장으로서는 참으로 불편한 일이 아닐 수 없다. 이럴 때 영속성 전이를 하여 CASCADE 속성을 넣어주면 편하다 다만 CASCADE는 하나의 마스터 테이블만을 참조할 때만 사용할 수 있다. 특정 엔티티를 영속 상태로 만들 때, 연관된 엔티티도 함께 영속상태로 만들고 싶을 때 CASCADE를 사용한다. 예 : 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장하는 형태 ※ 영속성 전이: 저장 @OneToMany(mappedBy="parent", cascade=CascadeType... 2023. 3. 3. [JPA/Java] 즉시 로딩과 지연 로딩 어떠한 Member 테이블과 Team 테이블이 있는데 Member는 Team에 속하기 때문에 Member는 Team_ID를 가지고 있다. 만약 Member 객체를 불러올 때, 그 멤버가 속한 팀의 정보를 다 불러와야할까?? 방식에 따라 다르겠지만 JPA에서는 연관관계 데이터를 불러오는 방법 두 가지 방법을 제공한다. (1) 지연 로딩 (FetchType.LAZY) Member.java @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") p.. 2023. 3. 2. 이전 1 2 3 4 5 6 7 ··· 9 다음 728x90 반응형