@Id ์ฃผ์
Hibernate์ ๊ฐ Entity ์ํฐํฐ๋ ๊ธฐ๋ณธ ํค๊ฐ ๋ ํ๋๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค. ์ด ํ๋์๋ ์ด ํด๋์ค์ ๋ชจ๋ ๊ฐ์ฒด์ ๋ํ ๊ณ ์ ํ ๊ฐ์ด ํฌํจ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ํ๋์๋ @Id ์ฃผ์์ด ์ถ๊ฐ๋ฉ๋๋ค .
์ผ๋ฐ ํ์:
@Id
Class Name;
์:
@Entity
@Table(name="user")
class User
{
@Id
@Column(name="id")
public Integer id;
@Embedded
public UserAddress address;
@Column(name="created_date")
public Date createdDate;
}
์ฃผ์ ๋ฐฐ์น
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ํ๋๋ฟ๋ง ์๋๋ผ ๋ฉ์๋(๊ฒํฐ ๋๋ ์ธํฐ)์ ๋ํด์๋ @Column ์ฃผ์์ ์์ฑํ ์ ์์ต๋๋ค. ์:
@Entity
@Table(name="user")
class User
{
public Integer id;
public Date createdDate;
@Id
@Column(name="id")
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="created_date")
public Date getDate() {
return this.createdDate;
}
public void setCreatedDate(Date date) {
this. createdDate = date;
}
}
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฃผ์์ด ํด๋์ค๋ฟ๋ง ์๋๋ผ ์ธํฐํ์ด์ค์๋ ์ถ๊ฐ๋๊ธฐ ์์ํ์ ๋ ๋ํ๋ฌ์ต๋๋ค. ์ธํฐํ์ด์ค์๋ ํด๋์ค ํ๋๊ฐ ์์ง๋ง getter ๋ฐ setter ๋ฉ์๋๊ฐ ์์ต๋๋ค. Hibernate๋ ์ด ๋ ํ์ค์ ๋ชจ๋ ์ง์ํฉ๋๋ค.
์ค์ํ! ํด๋์ค์ @Entity ์ฃผ์์ด ์์ผ๋ฉด ๋ชจ๋ ํ๋๊ฐ Hibernate์ ์ํด ์์ ํ๋๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค( @Transient ์ฃผ์์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ ). ํ๋์ ์ฃผ์์ด ์ ํ ์๋ ๊ฒฝ์ฐ์๋: ์ด ๊ฒฝ์ฐ ์ด ์ด๋ฆ์ ํด๋์ค ํ๋ ์ด๋ฆ๊ณผ ๋์ผํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๊ธฐ์ @Id ์ฃผ์์ด ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ฃผ์์ด ํด๋์ค ํ๋์ ๋ฐฐ์น๋๋ฉด Hibernate๋ ํ๋์ ์ด๋ฆ๊ณผ ์ ํ์ ๋ณผ ๊ฒ์ ๋๋ค. @Id ์ฃผ์์ด ๋ฉ์๋์ ๋ฐฐ์น ๋๋ฉด Hibernate๋ ๋ฉ์๋์ ์ด๋ฆ๊ณผ ์ ํ์ ๋ณผ ๊ฒ์ ๋๋ค.
์ 1:
@Entity
@Table(name="user")
class User
{
@Id
public Integer id;
public Date createdDate; //this field will be treated as if it had @Column(name=" createdDate ")
}
์ 2:
@Entity
@Table(name="user")
class User
{
public Integer id;
public Date createdDate;
@Id
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getDate() { //this field will be treated as if it had @Column(name=โdate โ)
return this.createdDate;
}
public void setCreatedDate(Date date) {
this. createdDate = date;
}
}
@GeneratedValue ์ฃผ์
์ ๊ฐ์ฒด์ ID๋ฅผ ์ง์ ํ ๋นํ๊ฑฐ๋ Hibernate์ ์๋น์ ๋งก๊ธธ ์ ์์ต๋๋ค. Hibernate๊ฐ ๊ฐ์ฒด์ ID๋ฅผ ํ ๋นํ๋ ๋ฐฉ๋ฒ์ ๋ ์ ์ดํดํ๊ธฐ ์ํด ํน๋ณํ ์ฃผ์์ด ์์ต๋๋ค.
@GeneratedValue
์ด ์ฃผ์์ ์ผ๋ฐ์ ์ผ๋ก @Id ์ฃผ์ ๊ณผ ๋์ผํ ํ๋๋ฅผ ํ์ํฉ๋๋ค . ๊ทธ๋ ๋ 4๊ฐ์ง ๊ฐ๋ฅํ ID ํ ๋น ์ ๋ต์ด ์์ต๋๋ค.
- ์๋
- ์ ์
- ์์
- ํ ์ด๋ธ
์ง์ ๋ ์ ๋ต์ด ์๋ ์ฃผ์์ ์:
@Entity
@Table(name="user")
class User
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Integer id;
public Date createdDate;
}
์ ์ฑ ๊ฐ์ ์ง์ ํ์ง ์์ผ๋ฉด AUTO ์ ๋ต์ด ์ ํ๋ฉ๋๋ค. AUTO ์ ๋ต์ Hibernate๊ฐ ์ฃผ๋ก ID ํ๋์ ๋ฐ์ดํฐ ์ ํ์ ๊ธฐ๋ฐ์ผ๋ก ID ์์ฒด๋ฅผ ํ ๋นํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ ์ ํ์? ์, ID ์ ํ์ ๋ฌธ์์ด ๋๋ GUID์ ๊ฐ์ด ๋งค์ฐ ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์:
@Entity
@Table(name="user")
class User
{
@Id
@GeneratedValue
public UUID id;
public Date createdDate;
}
์ฐธ๊ณ : Java์ GUID๋ ์ ํต์ ์ผ๋ก UUID๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Hibernate๋ ์์ฒญํ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด์ ๋ํ ๊ณ ์ ํ UUID๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ค์ํ @GeneratedValue ์ ๋ต
GeneratedValue(strategy = GenerationType.IDENTITY) ์ ํ์ ์ง์ ํ๋ฉด Hibernate๋ ID ์ค์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ธต์ ์์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก PRIMARY KEY, AUTOINCREMENT๋ผ๋ ๋ ์ด๋ธ์ด ์ง์ ๋ ์ด์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ID๊ฐ ๊ณ ์ ํ๊ณ ํน๋ณํ ์ง์ ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ์์ฑ๋๊ธฐ๋ฅผ ์ํ๋ ๊ฒฝ์ฐ GeneratedValue(strategy = GenerationType.SEQUENCE) ์ฃผ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค . ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(generator = "sequence-generator")
@GenericGenerator(
name = "sequence-generator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "user_sequence"),
@Parameter(name = "initial_value", value = "4"),
@Parameter(name = "increment_size", value = "1")
}
)
private long userId;
// ...
}
ID๋ฅผ ์์ฑํ๋ ๋ ๋ง์ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ๋ฌ ์ด๋ก ๊ตฌ์ฑ๋ ๋ณตํฉ ๊ณ ์ ํค๊ฐ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด๋ฅผ ์ธ ๋ ์ด๋ฌํ ์ด์ ๋ชจ๋ ์ฑ์์ผ ํฉ๋๋ค.
์์ธํ ์ค๋ช ํ์ง ์๊ฒ ์ต๋๋ค. ๊ทธ๋๋ ์ฐ๋ฆฌ ๊ฐ์์ ๋ชฉ์ ์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ค์ ๋งํ๋ ๊ฒ์ด ์๋๋ผ Hibernate์ ์ต์ํด์ง๋ ๊ฒ์ ๋๋ค.
GO TO FULL VERSION