DB 방언


객체와 테이블 생성하고 매핑

@Entity : JPA가 관리할 객체

@Id : DB PK와 매핑

→ JPA에서는 꼭 transaction 이라는 단위가 가장 중요하다. 모든 데이터를 변경하는 모든 작업은 JPA에서 꼭 transaction 안에서 작업 해야 된다.

JPA가 매핑 정보를 보고 알아서 DB에 넣어준다. → 멤버 테이블 멤버의 어느 테이블에 저장대로 한 적이 없는데 ??? → 관례에 따름. 코드로 쉽게 알아보자.

@Entity
@Table(name = "USER")
public class Member{
	@Id
	private Long id;
	@Column(name="username") // 이렇게 하면 db INSERT 쿼리가 나갈 때
	// 예를 들면, 여기가 nameId가 아니고 username id로 나가게 되는 것이다.
	// 즉, 어노테이션에다가 필요한 매핑을 해주면 되는 것이다.
	private String name;

예제를 하면, 자바 객체에서 값만 바꿧는데 어떻게 db에 반영이 된거지? → JPA를 통해서 이렇게 엔티티를 가져오면 얘는 JPA가 이제 관리를 하기 때문이다. JPA가 변경이 됐는지 안 됐는지 트랜잭션을 커밋하는 시점에 그것을 다 체크하기 떄문. 그래서 뭔가 바뀌면 업데이트 쿼리를 만들어서 날린다. 트랜잭션 커밋하기 직전에 업데이트 쿼리를 만들어서 날리고 트랜잭션이 딱 커밋이 된다. 그래서 업데이트 쿼리가 나가게 되는 것이다.


주의

엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유한다.

EntityManagerFactory는 웹 애플리케이션 서비스를 한다고 하면, 웹서버가 올라오는 시점에 딱 하나만 생성이 되는 것이다. DB당 하나만 생성이 되고, 이 EntityManagerFactory에서 EntityManager는 고객의 요청이 올때마다 계속 썻다가 em.close()버리는 식으로 동작한다고 보면 된다. (try-catch-fianlly의 finally에서 버림)