๐ ํ๋ก์ ํธ ์์ฑ
> H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น
H2 Database Engine
์ค์น๊ฐ ์คํจํ๋ฉด 8082 ํฌํธ๊ฐ ์ฌ์ฉ์ค์ธ์ง ํ์ธํด ๋ณด์. ๋ด ๊ฒฝ์ฐ์๋ 8082 ํฌํธ๊ฐ ์ฌ์ฉ์ค์ด์ฌ์ ์ค์น๊ฐ ์๋๋ค.
// ํฌํธ๊ฐ ํ์ธ
netstat -na | findstr ํฌํธ๋ฒํธ
//ํฌํธ์ PID ํ์ธ
netstat -nao | findstr ํฌํธ
// ํ๋ก์ธ์ค ID ์ฐพ๊ธฐ
tasklist | findstr PID๋ฒํธ
// ํ๋ก์ธ์ค ์ฃฝ์ด๊ธฐ
taskkill /f /pid PID๋ฒํธ
1. Embedded๋ก ์ฐ๊ฒฐํด dbํ์ผ์ ๋ง๋ ๋ค. ์ฌ์ฉ์ ๊ณ์ ๋๋ ํ ๋ฆฌ์ test.mv.db ํ์ผ์ด ์์ฑ ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
2. test.mv.db ํ์ผ์ด ์์ฑ ํ, TCP ์์ผ์ ์ ์ํ๋ค.
> ์ง์ TCP ์์ผ์ผ๋ก ์ฐ๊ฒฐํ์ง ์๋ ์ด์ ๋, h2 1.4.198๋ฒ์ ์ดํ ๋ณด์ ๋ฌธ์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋์ผ๋ก ์์ฑ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
> ์ง์ TCP ์์ผ์ผ๋ก ์ฐ๊ฒฐ์ ์๋ํ๋ฉด Database not found, either pre-create it or allow remote ~ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉฐ ์ฐ๊ฒฐ์ด ๋์ง ์๋๋ค.
> JPA ์ค์ ํ๊ธฐ(Maven ๊ธฐ์ค)
- resources ์๋ META-INF์ persistence.xml ์ธํ
- JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํด ์ง์์ฑ์ ์ ๊ณตํ๋ค. persistence.xml ์ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ๋ค.
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- ํ์ ์์ฑ -->
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<!-- ์ต์
-->
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
</properties>
</persistence-unit>
</persistence>
๐ Test
1. ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด, h2 database์ Member table์ createํ๋ค.
2. Java Class์์ entity๋ฅผ ์ ์ํ๋ค.
@Entity
public class Member {
@Id
private Long id;
private String name;
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;
}
}
3. persist๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); //๋ก๋ฉ ์์ ์ ํ๋ฒ์ ๋ง๋ค์ด์ผํ๋ค.
EntityManager em = emf.createEntityManager(); //ํธ๋ ์ ์
๋จ์ ๋ง๋ค ๋ง๋ค์ด์ผํ๋ค.
EntityTransaction tx = em.getTransaction(); //jpa๋ ํธ๋ ์ ์
๋จ์ ์์์ ์ํ๋์ผํ๋ค.
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("HI");
em.persist(member);
tx.commit();
}catch (Exception e){
tx.rollback();
}finally {
em.close();
}
emf.close();
}
}
4. ๊ฒฐ๊ณผ ํ์ธ
[์ฐธ๊ณ ]
- ํ ์คํธ ๋์ค, persistence.xml์์ ์ค์ ์ ๋ณด๋ฅผ ์กฐํ ํ persistenceUnitName์ผ๋ก EntityMangerFatory ์์ฑ ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException… ๊ทธ๋ฆฌ๊ณ java.lang.ClassNotFoundException: javax.xml.bind.JAXBException…
[์์ธJ
- AXB API๋ ์๋ฐ 9๋ฒ์ ๋ถํฐ๋ ๋ ์ด์ ํฌํจ๋์ง ์๋๋ค. ์๋ฐ 11๋ถํฐ๋ JDK์์ ์์ ํ ์ญ์ ๋
[ํด๊ฒฐ๋ฐฉ๋ฒ]
- ํ๋ก์ ํธ์ JAXB ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจ
- maven
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
-gradle
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
โ ์ฃผ์!
- ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ๋ ํ๋๋ง ์์ฑํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ๊ณต์ ํด์ผํ๋ค
- ์ํฐํฐ ๋งค๋์ ๋ ์ฐ๋ ๋๊ฐ์ ๊ณต์ ํ๋ฉด ์๋๋ค.
- JPA์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์์์ ์คํํด์ผํ๋ค.
REFERENCE
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
'๊ณต๋ถ > ORM,JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JPA] JPA๋? (0) | 2021.11.22 |
---|