목록전체 글 (348)
파게로그
🎈 JPA의 다양한 쿼리 방법 ▪ JPQL ▪ JPA Criteria ▪ QueryDSL ▪ Native SQL ▪ JDBC API의 직접 사용, MyBatis, SpringJdbcTemplate과 함께 사용 JPQL(Java Persistence Query Language) "database-independent query language that operates on the logical entity model as opposed to the physcial data model" 가장 단순한 조회 방법 - EntityManager.find() - 객체 그래프 탐색(a.getB().getC()) JPA를 사용하면 엔티티 객체를 중심으로 개발 그러나, 문제는 검색 쿼리... 검색을 할 때에도 테이블이 아..
더보기 Pro JPA 2 in Java EE 8: An In-Depth Guide to Java Persistence APIs CHAPTER 6. Entity Manager 엔티티는 생성된다고 해서 곧바로 저장되지는 않는다. 마찬가지로 엔티티가 GC된다고 해서 곧바로 DB에서 제거되지도 않는다. 이것은 엔티티를 조작해야 하는 어플리케이션이 영속성 라이프사이클을 관리하기 위한 로직이다. JPA는 어플리케이션이 RDB에서 엔티티를 관리하고 검색할 수 있도록 하기 위해서 EntityManager라는 인터페이스를 제공한다. 일견 이는 JPA의 한계로 보인다. persistence runtime이 어떤 객체가 persistent한지 알고 있다면, 어플리케이션이 프로세스에 개입해야만 하는 이유는 무엇일까? Rest..
객체가 연관관계 없이, 테이블에 맞게 모델링되어 있을 때(참조 대신 FK를 그대로 사용) @Entity public class Member { @Id @GeneratedValue private long id; @Column(name = "USERNAME") private String name; private int age; @Column(name = "TEAM_ID") private long teamId; @Enumerated(EnumType.STRING) private Tier tier; // getter and setters... } ////////// @Entity public class Team { @Id @GeneratedValue private long id; private String nam..
4@Column name: 필드와 매핑할 테이블의 컬럼 이름 insertable, updatable: 읽기 전용(예를 들어 insertable=false라고 하면 DB의 갱신이 이루어지지 않음) nullable: null 허용 여부 결정, DDL 생성 시 사용 unique: 유니크 제약 조건, DDL 생성 시 사용 columnDefinition, length, precision, scale: DDL 생성 시 사용 length: 데이터의 길이 설정, DDL 생성 시 사용 @Temporal 날짜 타입 매핑 @Temporal(TemporalType.DATE) private Date date; // 날짜 @Temporal(TemporalType.TIME) private Date time; // 시간 @Tempo..
자료형 등 메타 정보를 직접 확인하는 과정을 거쳐 DDL문까지 JPA가 생성할 수 있다. 애플리케이션 실행 시에, JPA가 데이터베이스 방언까지 고려하여 적절한 DDL을 자동으로 생성하는 것이다. 다만, 이렇게 생성한 DDL은 개발에서만 사용해야 한다. 그나마 validate와 none은 사용할 수 있다고 할지라도, 나머지는 절대 운영 장비에서 사용하면 안 된다. hibernate.hbm2ddl.auto (아마도 hbm은 hibernate mapping to ddl이 아닐까?) create 기존 테이블 삭제 후 다시 생성(DROP + CREATE) create-drop CREATE와 같지만, 종료 시점에 테이블을 DROP update 변경분만 반영 validate 엔티티와 테이블이 정상 매핑되어있는지만 ..
Spring 프레임워크 없이, 기본적인 Maven project에서 JPA를 사용해보자. pom.xml org.hibernate hibernate-entitymanager 5.4.32.Final mysql mysql-connector-java 8.0.25 Maven dependencies에 Hibernate를 추가하면, JPA 또한 자동으로 추가된다. 한편 resources 아래에 META-INF라는 디렉터리를 생성하고, persistence.xml에 다음과 같은 내용을 추가한다. 다만 Spring Boot를 사용하면 프레임워크 내부에서 동작하므로 작성할 필요는 없다. persistence.xml entity가 될 클래스를 만들고 다음과 같이 클래스를 작성한다. package helloJpa.entity..
SK Planet에서 제공하는 김영한 강사님의 강의를 참고했다. T아카데미(https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=149) YouTube(https://www.youtube.com/watch?v=WfrSN9Z7MiA&list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U) 간단하게 요약하자면, JPA를 통해서 객체지향 프로그래밍과 관계형 데이터베이스라는, 서로 다른 패러다임의 간극을 메꿀 수 있다. 객체지향적으로 프로그램을 설계할 수록 SQL 쿼리는 보다 복잡해지는데 이를 ORM을 통해서 해결할 수 있는 것이다. Member와 Team이라는 객체, 그리고 동일한 이름의 테이블이 있다고 생각해보자. ..
https://mybatis.org/mybatis-3/ko/dynamic-sql.html에서 foreach element에 대해서 살펴본다. 만약 Assignment 여러개의 번호를 배열로 받는, int deleteAll(int[] ids)라는 메서드가 있다면, 이 때는 MyBatis가 제공하는 element를 사용할 수 있다. DELETE FROM assignment WHERE id IN #{id} "컬렉션 파라미터로 Map이나 배열객체와 더불어 List, Set등과 같은 반복가능한 객체를 전달할 수 있다. 반복가능하거나 배열을 사용할때 index값은 현재 몇번째 반복인지를 나타내고 value항목은 반복과정에서 가져오는 요소를 나타낸다. Map을 사용할때 index는 key객체가 되고 항목은 value..