목록Database/JPQL (17)
코드 그라데이션
벌크 연산 - 문제 상황 벌크 연산 벌크 연산 주의사항 예시, 지금 있는 모든 회원의 나이를 전체적으로 20세로 변경하기 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team te..
Named 쿼리 - 정적 쿼리 방법 1. Named 쿼리 - 어노테이션 어노테이션 예시 Member 어노테이션으로 클래스 위에 추가하고 @Entity @NamedQuery( name = "Member.findByUsername", query="select m from Member m where m.username = :username") public class Member { } JpqlMain 이렇게 수정해주면 List resultList = em.createNamedQuery("Member.findByUsername", Member.class) .setParameter("username", "회원1") .getResultList(); for (Member member : resultList) { Sy..
엔티티 직접 사용 - 기본 키 값 실습 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.pers..
페치 조인과 일반 조인의 차이 JPQLMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(t..
컬렉션 페치 조인 실습 JpqlMain public class JpqlMain { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { Team teamA = new Team(); teamA.setName("팀A"); em.persist(teamA); Team teamB = new Team(); teamB.setName("팀B"); em.persist(teamB..
실무에서 정말정말완전완전대박 중요함 페치 조인 엔티티 페치 조인 즉시 로딩 가져올 때와 같다. 예제 구조 예제의 단순화를 위해 회원 4는 제외하고 만들었음. 실행 결과 Member와 Team의 연관관계가 manytoone이고, 지연로딩 설정 되어 있다. 그러면 팀은 프록시로 들어온다. 지연 로딩이 일어나고, 실제 member.getTeam().getName()을 호출한 시점에 그때마다 데이터베이스에 쿼리를 날린다. 영속성 컨텍스트에서 조회 결과적으로 보면 쿼리 총 3번 나갔다. 회원 100명? 그럼 쿼리 100번 나가야 한다. N + 1. 1은 회원을 가져오기 위해서 첫 번째로 날린 쿼리 첫 번째 쿼리로 얻은 결과와 맞는 쿼리를 N번 날리게 되는 것. 이게 N + 1 문 이걸 해결하려면 페치 조인 사용 ..
경로 표현식 예시 상태 필드 String query = "select m.username From Member m"; 단일 값 연관 경로 String query = "select m.team.~~ From Member m"; 이게 m.team.username / m.team.id 뭐 요런식으로 한 번 더 들어갈 수 있다는 의미. 묵시적 내부 조인이 발생한다는 말이 무슨 뜻이냐면. -> 객체에서는 .(점)을 찍어서 하면 되지만 DB에서는 조인이 일어나야 한다. 그게 묵시적 내부 조인이라고 칭해짐. 굉장히 조심해서 써야한다. 실무하는 사람들은 직관적으로 조심해야 함을 안다. 성능 튜닝에 매우 지대한 영향을 준다. 웬만하면 JPQL과 SQL을 맞춰라. 컬렉션 값 연관 경로 String query = "sele..