JPA 10

[JPA] ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ

์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ @mappedBy FK๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ” Table User @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "TEAM_ID") private Team team; Team @OneToMany(mappedBy = "team") private List users = new ArrayList(); 1(Team): N(User)์˜ ๊ด€๊ณ„์ผ ๊ฒฝ์šฐ jpa ์„ค์ •์„ ์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ User์™€ Team๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์— ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ์„ค์ • ์‹œ ์–ด๋Š ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์—ˆ์„ ๋•Œ ์‹ค์ œ DB์— ๋ฐ˜์˜์„ ํ•˜๋Š๋ƒ๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ User๊ฐ€ ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์–ด User ๊ฐ์ฒด์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ฃผ์–ด์•ผ DB์— ๊ฐ’์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค...

CS 2021.12.22

[JPA] ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘

@Id @GeneratedValue IDENTITY ์ „๋žต SEQUENCE ์ „๋žต TABLE ์ „๋žต ๋ฐฉ๋ฒ• ์ง์ ‘ ํ• ๋‹น : @Id ๋งŒ ์‚ฌ์šฉ ์ž๋™ ์ƒ์„ฑ : @GeneratedValue @Id @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private String id; User user = new User(); user.setId("Id_a") user.setUsername("A"); IDENTITY ์ „๋žต GenerationType.IDENTITY ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ์„ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. MYSQL, PostgreSQL, SQL Server, DB2์—์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ex) MySQL์˜ AUTO_ INCREMENT @Id @GeneratedValue(stra..

CS 2021.12.15

[JPA] ํ•„๋“œ์™€ ์ปฌ๋ฆผ๋งคํ•‘

๋งคํ•‘ ์–ด๋…ธํ…Œ์ด์…˜ @Column : ์ปฌ๋Ÿผ ๋งคํ•‘ ```@Temporal`` : ๋‚ ์งœ ํƒ€์ž… ๋งคํ•‘ @Enumerated : Enum ํƒ€์ž… ๋งคํ•‘ @Lob : BLOB, CLOB ๋งคํ•‘ @Transient : ํŠน์ • ํ•„๋“œ๋ฅผ ์ปฌ๋Ÿผ์— ๋งคํ•‘ํ•˜์ง€ ์•Š์„ ์‹œ(๋งคํ•‘ ๋ฌด์‹œ) @Enumerated ์‚ฌ์šฉ ์‹œ ์ฃผ์˜ํ•  ์  EnumType.ORDINAL: enum ์ˆœ์„œ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ EnumType.STRING: enum ์ด๋ฆ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ Enum์˜ ๊ธฐ๋ณธ ์„ค์ •์€ EnumType.ORDINAL ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์„ค๋ช…์ฒ˜๋Ÿผ ORDINAL์€ DB์— ์ˆœ์„œ๋งŒ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŒ์•ฝ enum์— ๋‹ค๋ฅธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ORDINAL์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ enumType์„ ORDINAL์ด ์•„๋‹Œ STRING์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ..

CS 2021.12.10

[JPA] ์—”ํ‹ฐํ‹ฐ๋งคํ•‘

์—”ํ‹ฐํ‹ฐ๋งคํ•‘ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ” ๋งคํ•‘: @Entity, @Table ํ•„๋“œ์™€ ์ปฌ๋Ÿผ ๋งคํ•‘: @Column ๊ธฐ๋ณธ ํ‚ค ๋งคํ•‘: @id ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘: @ManyToOne, @JoinColumn @Entity @Entity๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Entity๋ผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘ํ•  ํด๋ž˜์Šค๋Š” @Entity๊ฐ€ ํ•„์ˆ˜์ ์œผ๋กœ ๋ถ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ƒ์„ฑ์ž ํ•„์ˆ˜ ์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. final, enum, interface, inner ํด๋ž˜์Šค๋Š” @Entity๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Table name catalog schema uniqueConstrains(DDL) ... @Entity // @Entity ์‚ฌ์šฉ๋ฐฉ๋ฒ• @Table(name = "USER") // @Table(name) ์‚ฌ์šฉ๋ฐฉ๋ฒ• public..

CS 2021.12.09

[JPA] ์ค€์˜์† ์ƒํƒœ

์ค€์˜์† ์ƒํƒœ EntityManager(์˜์†์„ฑ ์ปจํ…์ŠคํŠธ)์— ์˜ฌ๋ ค์ ธ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ ๋”์ด์ƒ JPA๊ฐ€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. Method EntityManager.detach() EntityManager.clear() EntityManager.close() Code EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { User user = em.find(User.class, 1L); user.setName("AAAA"); em..

CS 2021.12.08

[jpa] ์˜์†์„ฑ์ปจํ…์ŠคํŠธ1

JPA์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์ต์ˆ™์ง€ ์•Š์•„ ์ธ๊ฐ•์„ ๋“ค์œผ๋ฉด์„œ ์ •๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ฏ์„  ๊ฐœ๋…๋“ค์ด ๋งŽ์•„ ๊ฐœ์ธ์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ์ดํ•ดํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์ •๋ฆฌํ•œ ๋ถ€๋ถ„๋“ค์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€ ๋‚จ๊ฒจ ์ฃผ์‹œ๋ฉด ๋ฐ”๋กœ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Words ์˜์†์„ฑ: "entity"๋ฅผ ์—ฐ๊ตฌ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ EntityManager.persist(entity) ์•ž์— ์ด์•ผ๊ธฐํ•œ persist๋Š” ์‚ฌ์‹ค db์— insert๋ฅผ ์ง์ ‘ ์‹œํ‚ค๋Š” ์ฟผ๋ฆฌ๋ฌธ์ด ์•„๋‹ˆ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. persist๋ฅผ ํ†ตํ•ด ํŠน์ •ํ•œ ์ค‘๊ฐ„ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๊ณ  commit ์‹œ์— ์‹ค์ œ insert๊ฐ€ ์ด๋ฃจ์–ด ์ง‘๋‹ˆ๋‹ค. ์ค€์˜์†, ์‚ญ์ œ // ํšŒ์› ์—”ํ„ฐํ‹ฐ๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋ถ„๋ฆฌ, ์ค€์˜์† ์ƒํƒœ em.detach(user); // ๊ฐ์ฒด๋ฅผ ์‚ญ..

CS 2021.12.07

# [JPA] JPQL์˜ ๊ธฐ๋ณธ์  ์ •์˜์™€ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ๋ฒ•

์•ž์„œ ํ•œ ๋‚ด์šฉ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ crud์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ํ•˜์ง€๋งŒ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์„ ๋ถ™์—ฌ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ• ๊นŒ์š”? ์ด๋•Œ JPA์—์„œ ์ œ๊ณตํ•˜๋Š” ์–ธ์–ด๊ฐ€ JPQL์ž…๋‹ˆ๋‹ค. JPQL์ด๋ž€? SQL์„ ์ถ”์ƒํ™”ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด๋กœ ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ์™œ? JPA ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—”ํ„ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ application์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ DB์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ํฌํ•จ๋œ SQL์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ง• SQL์„ ์ถ”์ƒํ™”ํ•ด์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค SQL์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. JPQL์„ ํ•œ๋งˆ๋””๋กœ ์ •์˜ํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ SQL ์ž…๋‹ˆ๋‹ค. SQL๊ณผ..

CS 2021.11.30

[JPA] jpa ๊ธฐ๋ณธ ๋ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

JPA ๊ธฐ์ดˆ์™€ ๋งคํ•‘ @Entity : JPA๊ฐ€ ๊ด€๋ฆฌํ•  ๊ฐ์ฒด๋ผ๋Š”๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค(class ์œ„์— ์„ ์–ธ) @Id : DB PK์™€ ๋งคํ•‘ ํ•  ํ•„๋“œ๋ฅผ ์ง€์นญํ•ฉ๋‹ˆ๋‹ค(field ์œ„์— ์„ ์–ธ) EntityManager EntityManagerFactory: application ๋กœ๋”ฉ ์‹œ์ ์— ๋”ฑ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. EntityManger: transaction ๋งˆ๋‹ค ์ƒ์„ฑํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. persistence.xml hibernate option ์„ค์ • ์€ ์•„๋ž˜์™€ ๊ฐ™์ด sql์„ ๋ณด์—ฌ์ฃผ๊ฒŒ ํ•˜๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค. Hibernate: /* insert hellojpa.User */ insert into User (name, id) values (?, ?) ์€ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด ๋“ค์—ฌ์“ฐ๊ธฐ ๋ฐ ์ค„๋ฐ”๊ฟˆ ๋“ฑ์„ ํ•ด์„œ ๋ณด์—ฌ์ฃผ๊ฒŒ ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์€ ..

CS 2021.11.26

[JPA] jpa ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ์œ ์˜์‚ฌํ•ญ

intro ์ธํ”„๋Ÿฐ์˜ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋“ฃ๋Š” ์ค‘ ์ •๋ฆฌํ•˜๋ฉด์„œ ์ฒดํฌํ•ด์•ผํ•  ๋ถ€๋ถ„๋“ค์ด ๋งŽ์•„ ๋”ฐ๋กœ ๊ฐ•์˜ ๊ณผ์ • ์ค‘ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋“ค์„ ์ •๋ฆฌํ•ด ๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด๋‚˜ ๋ณด์ถฉํ•  ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. project ์ƒ์„ฑํ•˜๊ธฐ dependency ์„ค์ • hibernate์˜ ์–ด๋–ค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ด์•ผํ• ๊นŒ? h2 ๋ฒ„์ „์€? hibernate ๋ฒ„์ „ ์„ค์ • ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ ํ›„ hibernate์˜ ๋ฒ„์ „์„ ์„ค์ •ํ•˜๋ ค๋ฉด ๋ณธ์ธ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” spirngBoot์˜ ๋ฒ„์ „์„ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. spring.io -> Projects -> ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „์˜ Reference Doc. ๋ฅผ ํด๋ฆญํ•˜์—ฌ ํ•ด๋‹น ๋ฒ„์ „์˜ document๋ฅผ ํ™•์ธํ•ด ๋ด…๋‹ˆ๋‹ค. ๊ทธ ํ›„ a single HTML page๋ฅผ ํด๋ฆญํ•ด์„œ ํ•œ..

CS 2021.11.23

JPA๋ž€?

JPA Words ORM Mybatis Hibernate JPA EJB Hibernate Spring Framework ORM(Object-relational mapping) ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘(์—ฐ๊ฒฐ)ํ•ด ์ฃผ๋Š” ๊ฒƒ. ORM์„ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SQL์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐ. ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ. JPA(Java Persistence API) EJB Entity Java Bean. (๊ณผ๊ฑฐ ์ž๋ฐ” ํ‘œ์ค€ ORM) ์ฝ”๋“œ๊ฐ€ ๊น”๋”ํ•˜์ง€ ๋ชปํ•˜๋‹ค. ๊ตฌํ˜„์ด ์–ด๋ ต๊ณ  ์‹คํ–‰์†๋„๊ฐ€ ๋งค์šฐ ๋Š๋ฆฌ๋‹ค. ์œ„์˜ ์ด์œ ๋กœ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Hibernate Open Source Gavin King์ด EJB๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ. ..

CS 2021.08.24
728x90
๋ฐ˜์‘ํ˜•