Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Tip

JPA의 컨셉은 Java Persistence API 의 약자로 데이터 베이스에 존재하는 모델을

자바객체로 DB종속적이지 않게 맵핑을 가능하게 하는데 목적이 있습니다.

JPA의 대략적인 사용법을 소개하고, 하위 섹션에서 기존 SQL 개발방식이 JPA에서는 어떻게

이 페이지에서는 JPA의 대략적인 사용법과 특징을 설명하겠습니다.

이러한게 있다라고 알고 대충 넘어가도 되겠습니다.


효율적인 방법으로 구현하는지를 살펴보면서, JPA와 별개로 RDB를 잘 활용하는 방법은 RDB를 잘 이해하는것임으로 JPA와 같이 정리하도록 하겠습니다

JPA의 특성과 같이 다시 상세하게 설명할 예정입니다.


설명을 위해, 축약된 코드로 설명을 하였으며, 풀소스는 아래에서 확인가능합니다.

CodeLink : http://git.webnori.com/projects/WEBF/repos/spring_jpa/browse

JPA 개념 추가설명

...

Code Block
languagejava
themeEmacs
titleUser Entity
@Entity
public class User {
	@Id
    @GeneratedValue
    @Column(name = "USER_ID")
    private Integer id;

	private String name;

	private String email;
 
	@ManyToOne
	@JoinColumn(name = "GROUP_ID", nullable=true )
    private GroupInfo groupInfo;	
}

...

Code Block
languagesql
themeEmacs
-- 그룹을 추가한다.
INSERT INTO test.group_info(
   group_id
  ,name
) VALUES (
   NULL -- group_id - IN int(11)
  ,''  -- name - IN varchar(255)
)


-- 사용자를 추가할시 그룹을 지정하거나, 나중에 지정한다. group id가 현재는 null 허용
INSERT INTO test.user(
   user_id
  ,email
  ,name
  ,group_id
) VALUES (
   NULL -- user_id - IN int(11)
  ,''  -- email - IN varchar(255)
  ,''  -- name - IN varchar(255)
  ,0   -- group_id - IN int(11)
)


-- 여러명을 등록할시 위 과정이 반복됩니다.




--학생인 사용자만 조회시..Join을 통해 해결
select * from user left outter join group_info gi on gi.name='학생'

...

FindByname 내에 내재되어 작동이 된다라는 사실입니다.

각종 Join(InnerInnerJoin,LeftLeftOutterJoin,Right....)에 대응하는 JPA Relation 키워드기능을  잘 파악해둬야합니다.


Note

이 샘플의 JPA함수 호출이 왜? left outer join을 자동적으로 선택하여 호출하게 되었는지

살펴볼 필요가 있습니다.

public class User {
/...
	@ManyToOne
	@JoinColumn(name = "GROUP_ID", nullable=true )
    private GroupInfo groupInfo;

회원이 가지는 외래키로(ManyToOne) 설정된 그룹ID가 null을 허용하고 있기때문입니다.
이 의미는, InnerJoin을 사용할경우 그룹에 소속되지 않는 사용자가 있을수 있기때문에
사용자 데이터도 조회할수 없음을 의미합니다.

InnerJoin이 성능과 최적화에 더 유리하며, 만약 InnerJoin으로 작동 시키고 싶으면
nuuable=false 필수값으로 지정하게 되면, JPA에서는 User<->Group 양방향 객체참조시 
그룹을 꼭가진 필수관계이기 때문에, 외부조인대신 내부조인을 선택하게 됩니다. 

JPA에서 연관관계/매핑부분은 가장중요한 부분이라 생각되며, 관련된 데이터 베이스
지식을 다시 공부해야할 필요도 있습니다.



SQL Join의 자유로운 표현력에 비해 ,JPA는 분명 제약적입니다. 

...