Page History
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 | ||||||
---|---|---|---|---|---|---|
| ||||||
@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 | ||||
---|---|---|---|---|
| ||||
-- 그룹을 추가한다. 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는 분명 제약적입니다.
...