์ํฐํฐ ๋งคํ
@Entity
@Entity
public class Member {
@Id @GeneratedValue
private Long id;
private String username;
}
@Entity๊ฐ ๋ถ์ ํด๋์ค๋ JPA๊ฐ ๊ด๋ฆฌ
JPA๋ฅผ ์ฌ์ฉํด์ ํ ์ด๋ธ๊ณผ ๋งคํํ ํด๋์ค๋ @Entity ํ์
๊ธฐ๋ณธ ์์ฑ์ ํ์(ํ๋ผ๋ฏธํฐ๊ฐ ์๋ public ๋๋ protected ์์ฑ์)
name ์์ฑ
@Entity(name = "Member")
public class Member {
JPA์์ ์ฌ์ฉํ ์ํฐํฐ ์ด๋ฆ์ ์ง์ ํ๋ค.
๊ธฐ๋ณธ๊ฐ: ํด๋์ค ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉ(์: Member)
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์๋ ์์ฑ
jpa:
hibernate:
ddl-auto: create
DDL์ ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์์ ์ ์๋ ์์ฑ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฉ์ธ์ ํ์ฉํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ ์ ์ ํ DDL ์์ฑ
DDL(Data Definition Lanuage) : ๋ฐ์ดํฐ์ ์์ฑ,์์ ,์ญ์ ํ๋ ์ญํ ์ ์ธ์ด
ํ๋์ ์ปฌ๋ผ ๋งคํ
@Column
@Column(name = "name")
private String username;
์ปฌ๋ผ ๋งคํ
name ์์ฑ : ๊ฐ์ฒด๋ username / DB์๋ name
@Enumerated
@Enumerated(EnumType.STRING)
private RoleType roleType;
์๋ฐ enum ํ์ ์ ์ํฐํฐ ํด๋์ค์ ์์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
@Enumerated ์ ๋ ธํ ์ด์ ์๋ ๋ ๊ฐ์ง EnumType์ด ์กด์ฌํ๋ค.
EnumType.ORDINAL : enum ์์ ๊ฐ์ DB์ ์ ์ฅ
EnumType.STRING : enum ์ด๋ฆ์ DB์ ์ ์ฅ
|
@Temporal
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
๋ ์งํ์ (java.util.Date, java.util.Calendar)์ ๋งคํํ ๋ ์ฌ์ฉ
TemporalType.DATE: ๋ ์ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ dateํ์ ๊ณผ ๋งคํ (์: 2013-10-11)
TemporalType.TIME: ์๊ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ timeํ์
๊ณผ ๋งคํ (์: 12:00:00)
TemporalType.TIMESTAMP: ๋ ์ง์ ์๊ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ timestampํ์
๊ณผ ๋งคํ (์:2013-10-11 12:00:00)
@Lob
@Lob
private String description;
๋งคํํ๋ ํ๋ ํ์ ์ด ๋ฌธ์๋ฉด CLOB ๋งคํ, ๋๋จธ์ง๋ BLOB ๋งคํ
CLOB: String, char[], java.sql.CLOB
BLOB: byte[], java.sql.BLOB
@Transient
@Transient
private int temp;
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ด์์ด ๊ฐ๋ฐ์๊ฐ ํ์์ ์ํด ๋ฉ๋ชจ๋ฆฌ์์๋ง ์ฌ์ฉํ๊ณ ์ถ์ ํ๋๋ฅผ ์ง์ ํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ, ์กฐํ ๋์ง ์๋๋ค.
๊ธฐ๋ณธ ํค ๋งคํ
@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
์ง์ ํ ๋น: @Id๋ง ์ฌ์ฉ
์๋ ์์ฑ(@GeneratedValue)
IDENTITY
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
๊ธฐ๋ณธ ํค ์์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์
IDENTITY : em.persist(memberA) -> ์์์ฑ ์ปจํ ์คํธ์ memberA๋ฅผ ๋ฃ์ ๋ PK๊ฐ ์์ด์ผํ๋ค .
DB์ ๊ฐ์ ๋ฃ์ด๋ด์ผ(INSERT ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ด์ผ) PK๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ ํ์ PK๋ฅผ ์ฝ์ด์จ๋ค .
๋ฐ์ดํฐ๋ฒ ์ด์ค์ INSERT SQL์ ์คํํ ์ดํ์ ID ๊ฐ์ ์ ์ ์๊ธฐ ๋๋ฌธ์
IDENTITY ์ ๋ต์ em.persist() ์์ ์ ์ฆ์ INSERT SQL ์คํ ํ๊ณ DB์์ ์๋ณ์๋ฅผ ์กฐํ
SEQUENCE
@Entity
@SequenceGenerator(
name = "MEMBER_SEQ_GENERATOR",
sequenceName = "MEMBER_SEQ",// ๋งคํํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ค ์ด๋ฆ
initialValue = 1, allocationSize = 1)
public class Member {
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ค ์ค๋ธ์ ํธ ์ฌ์ฉ
@SequenceGenerator ํ์
em.persist(member) ํ ๋ member ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๋ฃ์ผ๋ ค๋๋ฐ ( PK๋ฅผ ์์์ผํจ )
์ํ์ค ์ ๋ต์ด๋ค ? --> DBํํ ๊ฐ์ ์ป์ด์์ผ๊ฒ ๋ค ! -> ์ํ์ค PK๋ฅผ ์ป์ด์จ ํ persist
์ฟผ๋ฆฌ๋ค์ ์์์ฑ ์ปจํ ์คํธ์ ์์ฌ์๊ณ --> ํธ๋์ญ์ commit ํ๋ ์์ ์ ์ฟผ๋ฆฌ๋ค์ ํธ์ถ
allocationSize = 50
์ํ์ค ํ ๋ฒ ํธ์ถ์ ์ฆ๊ฐํ๋ ์(์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉ๋จ)
50๊ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ์ฌ๋ ค๋๋ ๋ฐฉ์
TABLE
@Entity
@TableGenerator(
name = "MEMBER_SEQ_GENERATOR",
table = "MY_SEQUENCES",
pkColumnValue = "MEMBER_SEQ", allocationSize = 1)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.TABLE,
generator = "MEMBER_SEQ_GENERATOR")
private Long id;
ํค ์์ฑ ์ ์ฉ ํ ์ด๋ธ์ ํ๋ ๋ง๋ค์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ์ค๋ฅผ ํ ๋ด๋ด๋ ์ ๋ต
@TableGenerator ํ์
AUTO
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
๋ฐฉ์ธ์ ๋ฐ๋ผ ์๋ ์ง์ , ๊ธฐ๋ณธ๊ฐ
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard