<?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>
Persistence.xml에서 현재는
<!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
부분을 주석처리 했으니 직접 DB에서 Member 테이블을 생성해줘야 한다.
테이블을 생성한 후에
여기서 이제 Member라는 Entity를 만들고 DB에 삽입을 진행할 건데
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity // Entity는 JPA에서 관리하는 것임을 나타냄
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;
}
}
여기서 @Entity를 사용하는 이유는 JPA가 관리하는 것임을 나타내기 위해서다.
public class JpaMain {
private EntityManager em;
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
em.close();
emf.close();
}
}
JpaMain 클래스는 지금까지는 설정 정보를 바탕으로 EntityManager 생성까지 진행한 것이다. 이제 삽입하려면 트랜잭션을 시작해고 끝을 맺어야 하는데,
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
private EntityManager em;
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member);
tx.commit();
em.close();
emf.close();
}
}
위의 코드처럼
EntityTransaction tx = em.getTransaction();
tx.begin();
를 통해서 트랜잭션을 시작하고 tx.commit()으로 끝마치면 된다. 그리고 확인해 보면,
제대로 들어가 있다.
사실 예외처리도 해줘야 하기에 아래 코드가. 깔끔한 코드이다.
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
private EntityManager em;
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
em.persist(member);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
사실 위의 코드들은 스프링에선 알아서 스프링이 해주기에
em.persist(member) 정도만 쓰이게 된다.
[ JPA ] 양방향 연관관계(1) - mappedBy (0) | 2022.01.07 |
---|---|
[ JPA ] 단방향 연관관계 (0) | 2021.12.30 |
[ JPA ] @Entity (0) | 2021.12.19 |
[ JPA ] JPA 구동 방식 (0) | 2021.12.14 |
[ JPA ] 영속성 컨텍스트란? (0) | 2021.08.01 |