용어 뜻:
출처:
Database의 데이터 모델은 JPA에서 Entity로 표현된다.
Entity는 데이터 모델을 객체 모델로 표현한 것으로 EJB 2.xx의 Entity Bean과 유사하지만
JPA에서는 별도의 인터페이스 없이 POJO 클래스로 표현된다.
Class에서는 Entity임을 표시하기 위해 @Entity Annotation이 달려있다.
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
|
/**
* Customer entity.
*/
@Entity //---이 클레스가 Entity임을 표시한다. ---//
@Table(name="ORDERAPP_CUSTOMER")
@NamedQuery(name="findCustomerByName", query="select c from Customer c where c.name=:name")
public class Customer implements Serializable {
// ---Annotation이 필더에 달려 있을 경우 Field access type이라 한다.--- //
@Id
private String id;
private String name;
private String address;
// ---cascade가 아래와 같이 설정되면 Customer entity가 생성/삭제 될때 --- //
// ---해당되는 entity도 같이 생성/삭제된다. --- //
@OneToMany(mappedBy="customer", cascade={CascadeType.PERSIST, CascadeType.REMOVE})
private List<Orders> orders;
// ---Entity에서 Defult constructor 는 필수다. --- //
public Customer(){}
public Customer(String id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public String getId() {return id;}
public String getName(){return name;}
public String getAddress(){return address;}
public void setAddress(String address){this.address = address;}
public List<Orders> getOrders(){return orders;}
public void setOrders(List<Orders> orders) {this.orders = orders;}
public void addOrder(Orders o){
if(orders == null)
orders = new LinkedList<Orders>();
orders.add(o);
}
}
| cs |
Entity는 기본적으로 하나의 Entity에 하나의 Database 테이블이 매핑된다.
M:N 관계가 존재시에는 테이블이 하나 더 존재할 수 있다.
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
|
/**
* Item entity.
*/
@Entity
@Table(name="ORDERAPP_ITEM")
@NamedQuery(name="findAllItems", query="select i from Item i")
public class Item implements Serializable {
private long id;
private String name;
private double price;
public Item() {}
public Item(String name, double price){
this.name = name;
this.price = price;
}
// ---Annotation이 프로퍼티에 달려 있을 경우 Property access type이라 한다.--- //
@Id @GeneratedValue
public long getId() {return id;}
public void setId(long id) {this.id = id;}
public String getName(){return name;}
public void setName(String name){this.name = name;}
public double getPrice() {return price;}
public void setPrice(double price) {this.price = price;}
}
| 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
|
/**
* Order entity.
*/
@Entity
@Table(name="ORDERAPP_ORDERS")
public class Orders implements Serializable {
@Id @GeneratedValue
private Long id;
@ManyToOne
private Customer customer;
@ManyToMany
@JoinTable(name="ORDERAPP_ORDERS2ITEMS")
private Collection<Item> items;
public Orders() {}
public Long getId() {return id;}
public void setId(Long id) {this.id = id;}
public Customer getCustomer(){return customer;}
public void setCustomer(Customer c){this.customer = c;}
public Collection<Item> getItems(){return items;}
public void setItems(Collection<Item> items){this.items = items;}
}
| cs |
예제 소스에 사용된 O/R(객체/관계) 매핑 표준 Annotation
Logical Annotation
@id: Primary Key에 해당하는 ID 필드임을 표시한다.
@GeneratedValue: Database에 의해서 값이 자동으로 생성되는 필드임을 표시한다.
Physical Annotation
@Table: Table Mapping
예제 소스에 사용된 Relationships 표준 Annotation
@OneToMany: 1:N 관계를 표현하기 위한 필드임을 표시한다.
@ManyToOne: N:1 관계를 표현하기 위한 필드임을 표시한다.
@ManyToMany: M:N 관계를 표현하기 위한 필드임을 표시한다.
@JoinTable: 관계를 표현할 때 어떤 테이블을 사용할 것인지에 대해 표시한다.
예제 소스에 사용된 Query 표준 Annotation
@NamedQuery: Static Query를 Entity Class에 직접 명기
Cascaded Type (연쇄 작업 설정)
CascadeType.PERSIST: 개체 삽입
CascadeType.MERGE: 업데이트
CascadeType.REMOVE: 삭제
CascadeType.REFRESH: 리프레쉬
CascadeType.ALL: 전부 적용
Javajigi.net, 2016-10-25, http://www.javajigi.net/pages/viewpage.action?pageId=5924
댓글
댓글 쓰기