개발관련/Spring 2015. 12. 7. 17:57

다대다에 대해서 알아보자. 


바로 소스 공개...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.zest.hibernate.chapter8.manytomanymapping;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
 
@Entity
public class Delegate {
 
    
    private int delegateId;
    private String delegateName;
    private List<Event> events = new ArrayList<Event>();
 
    
    @Id
    @GeneratedValue
    public int getDelegateId() {
        return delegateId;
    }
 
    public void setDelegateId(int delegateId) {
        this.delegateId = delegateId;
    }
 
    public String getDelegateName() {
        return delegateName;
    }
 
    public void setDelegateName(String delegateName) {
        this.delegateName = delegateName;
    }
 
    // 결과를 담을 테이블명을 정의 .
    @ManyToMany
    @JoinTable(name = "JOIN_DELEGATE_EVENT", joinColumns = { @JoinColumn(name = "delegateId") }, inverseJoinColumns = { @JoinColumn(name = "eventId") }    )
    public List<Event> getEvents() {
        return events;
    }
 
    public void setEvents(List<Event> events) {
        this.events = events;
    }
 
}
 
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
package com.zest.hibernate.chapter8.manytomanymapping;
 
import java.util.ArrayList;
import java.util.List;
 
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
 
@Entity
public class Event {
 
    
    private int eventId;
    private String eventName;
    private List<Delegate> delegates = new ArrayList<Delegate>();
 
    @Id
    @GeneratedValue
    public int getEventId() {
        return eventId;
    }
 
    public void setEventId(int eventId) {
        this.eventId = eventId;
    }
 
    public String getEventName() {
        return eventName;
    }
 
    public void setEventName(String eventName) {
        this.eventName = eventName;
    }
 
    @ManyToMany
    @JoinTable(name = "JOIN_DELEGATE_EVENT", joinColumns = { @JoinColumn(name = "eventId") }, inverseJoinColumns = { @JoinColumn(name = "delegateId") })
    public List<Delegate> getDelegates() {
        return delegates;
    }
 
    public void setDelegates(List<Delegate> delegates) {
        this.delegates = delegates;
    }
 
}
 
cs


두개의 객체를 선언하였다. 여기도 마찬가지로 새로운 어노테이션이 등장한다. 

@ManyToMany 이다. 그리고 JoinColumn이 아닌 JoinTable이다. 

@ManyToMany는 두개의 객체 두군데 다 선언을 한다. 그리고 필연적으로 @JoinTable을 사용해야한다. 각 속성을 알아보자. name은 m:n에 대한 데이터를 저장하는 테이블 이며, jonColumns와 inverseJoinColumkns가 존재한다. joinColumns는 join이 되는 컬럼 여기선 상호간의 컬럼 아이디를 써준다. 



결과 쿼리를 보자. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Hibernate: insert into TESTSCHEMA.Delegate (delegateName, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Delegate (delegateName, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Delegate (delegateName, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Delegate (delegateName, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Event (eventName, eventId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Event (eventName, eventId) values (?, ?)
Hibernate: insert into TESTSCHEMA.Event (eventName, eventId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
Hibernate: insert into TESTSCHEMA.JOIN_DELEGATE_EVENT (eventId, delegateId) values (?, ?)
cs


JOIN_DELEGATE_EVENT 테이블 생성되며 각 각의 정보가 m:n으로 맵핑이 된다.


하이버네이트 모든 코드는 https://github.com/zest133/hibernateTest.git 여기에 저장되어 있다.

posted by 제스트
: