@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String username;
private Integer age;
JPA 동작은 엔티티 매니저 팩토리 -> 엔티티 매니저 -> 트랜잭션 -> 비즈니스 로직 -> 트랜잭션 종료 -> 엔티티 매니저 종료 -> 엔티티 매니저 팩토리 종료라는 순서를 가짐.
public static void logic(EntityManager em) {
String id = "id1";
Member member = new Member();
member.setId(id);
member.setUsername("지한");
member.setAge(2);
//등록
em.persist(member);
//수정
member.setAge(20); // em.update가 아닌 .set엔티티 값만 변경
//한 건 조회
Member findMember = em.find(Member.class, id);
System.out.println("findMember=" + findMember.getUsername() + ", age=" + findMember.getAge());
//목록 조회
List<Member> members = em.createQuery("select m from Member m", Member.class).getResultList();
System.out.println("members.size=" + members.size());
//삭제
em.remove(member);
}
//목록 조회
TypedQuery<Member> query =
em.createQuery("select m from Member m", Member.class);
List<Member> members = query.getResultList();
즉 "select m from Member m" 부분은 Member 테이블이 아닌 엔티티 클래스 Member에 대한 쿼리, JPQL은 테이블을 전혀 알지 못한다!
따라서 JQPL 사용은 먼저 JPQL 쿼리 객체를 생성하고 쿼리 객체 메소드를 호출하면 JPA가 JPQL을 통해 SQL 쿼리를 요청하는 방식으로 이루어진다.