지연로딩
- 실제 객체를 사용하는 시점까지 데이터베이스 조회를 미룸.
class Member{
private Order order;
public Order getOrder{
return order;
}
// 처음 조회 시점에 SELECT MEMBER SQL
Member member = jpa.find(Member.class, memberId);
Order order = member.getOrder();
order.getOrderDate(); // Order를 사용하는 시접에 SELECT ORDER SQL
비교
- DB에서는 기본키의 값으로 각 row(행)을 구분함.
- 자바에서는 Identity(동일성), Equality(동등성)을 비교한다.
- 동일성 == : 객체 인스턴스의 주소 값을 비교
- 동등성 equals() : 객체 내부의 값을 비교
- jdbc 사용:
데이터 베이스에서 같은 행을 조회하였지만 객체의 동일성 비교에는 실패하엿다. 객체 측면에서는 서로 다른 인스턴스 이기 때문
class MemberDAO{
public Member getMember(String memberId){...}; // 일반 JDBC API
}
String memberId = "100";
Member member1 = memberDAO.getMember(memberId);
Member member2 = memberDAO.getMember(memberId);
member1 == member2; // False
String memberId = "100";
Member member1 = jpa.getMember(memberId);
Member member2 = jpa.getMember(memberId);
member1 == member2; // True