본문 바로가기
728x90
반응형

java230

[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] 즉시 로딩과 지연 로딩 어떠한 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.
[JPA/Java] 프록시(Proxy) 프록시 기초 프록시란? 프록시는 진짜 객체 대신에 가짜 객체로서 진짜를 대신해주는 개념 Hibernate는 지연 로딩을 구현하기 위해 프록시를 사용한다. 프록시를 사용할 때는, EntityManager에서 getReference() 를 사용하여 진짜 객체를 참조하여 가짜 객체를 만든다. 진짜 객체를 호출할 때는 em.find() 를 사용하지만, 가짜 객체는 em.getReference() 를 사용한다. 프록시의 특징은 다음과 같다. 1) 실제 클래스를 상속 받아서 만들어진다. 2) 실제 클래스와 비슷하다. 3) 사용하는 입장에서는 진짜 객체인지, 프록시 객체인지 구분하지 않고 사용해도 된다. Member 클래스를 예제로, 임의로 데이터를 생성하여 인스턴스를 생성하고, 인스턴스를 영속시킨 다음, 객체를 참.. 2023. 2. 27.
[JPA/JAVA] 다양한 연관관계 매핑 (N:1, 1:N, 1:1, N:M) 연관관계 매핑 시 고려사항 3가지가 있다 - 다중성에 있어서 어떤 관계인지 - 단방향인지, 양방향인지 - 연관관계의 주인은 누구인지 다중성은 4가지의 관계가 있다 - 다대일(N:1) : @ManyToOne - 일대다(1:N) : @OneToMany - 일대일(1:1) : @OneToOne - 다대다(N:M) : @ManyToMany 단방향, 양방향 관계에 있어서 - 테이블 : 외래 키 하나로 양쪽 조인이 가능하다. : 원래 방향이라는 개념은 없다 - 객체 : 참조용 필드가 있는 쪽으로만 참조가 가능하다 : 한쪽만 참조하면 단방향이고 : 양쪽이 서로 참조하면 양방향이다. 연관관계의 주인은 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는다. 객체의 양방향 관계는 A → B, B → A 처럼 참조가 2군.. 2023. 2. 20.
[JPA/java] 연관관계 매핑 (단방향, 양방향, 객체, 테이블, 기본키, 외래키 등) 연관 관계에 대한 예를 들기 위해서, 하나의 예를 들어보자. 1) 회원과 팀이 있는데, 2) 회원은 하나의 팀에만 소속될 수 있고, 3) 회원과 팀은 N:1관계이다. 연관 관계가 없는 객체를 테이블에 맞춰 모델링을 하면 아래와 같이 표현할 수 있다. 이것을 소스코드로 표현하면 아래와 같다. (Getter and Setter 생략) Member.java @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; @Column(name = "TEAM_ID") private Long teamId; } Team.java @Entity public class Team .. 2023. 1. 25.
[JPA/Java] 엔티티 매핑 (객체, 테이블, 필드, 컬럼, 기본 키 등) 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity @Entity가 붙은 클래스는 JPA가 관리하고, 이를 엔티티라 한다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity를 필수로 붙인다. ※ 주의 → 기본 생성자를 필수로 한다. (파라미터가 없는 public 또는 protected 생성자) → final 클래스, enum, interface, inner 클래스 사용하지 않음 → 저장할 필드에 final 사용하지 않음 @Entity 속성 정리 - 속성 : name : JPA에서 사용할 엔티티 이름을 지정한다. : 기본값 - 클래스 이름을 그대로 사용(예 : Me.. 2023. 1. 22.
728x90
반응형