본문 바로가기

Database

(17)
[JPA] 영속성 관리 : 매핑한 엔티티를 엔티티 매니저를 통해 엔티티의 생명 주기는 어떻게 사용되는가 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고. 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 개발자 입장에서는 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하자 ! 아래의 내용은 JPA 중 하이버네이트를 기준으로 기술하였음을 참고 부탁드립니다. 엔티티 매니저 팩토리와 엔티티 매니저, EntityFactory & EntityManager 데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 EntityManagerFactory를 하나만 생성한다. 예시) EntityManagerFactory emf = Persistence.createEntityManagerFactory("DB_NAME"); 이는 엔티티 매니저 팩토리를 생성하는 코드로 이를 호출하면 META-INF/persis..
[JPA] 프로젝트에서 JPA 적용 방법 1. EntityManagerFactory 생성 예시 ) EntityManagerFactory emf = Persistence.createEntityManagerFactory(“DB_NAME”); META/persistence.xml에서 이름이 “DB_NAME”인 영속성(persistence) 유닛을 찾아서 엔티티 매니저 팩토리를 실행한다. 이때, persistence.xml의 설정정보를 읽어서 JPA를 동작시키기 위한 기반 객체를 만들고, JPA 구현체에 따라서는 데이터베이스 커넥션 풀도 생성한다. 엔티티 매니저 팩토리는 애플리케이션 전체에서 딱 한 번만 생성하고 공유해서 사용해야한다. [참고] spring에서는 LocalContainerEntityManagerFactoryBean 을 이용 @Prima..
[JPA] 테이블과 매핑할 클래스 어노테이션 package jpabook.start; import javax.persistence.*; // JPA 어노테이션의 패키지 @Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )}) @Entity public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME", nullable = false, length = 10) private String username; private Integer age; public String getId() { return id..
[JPA] 버전별 특징 메모용도로 간결히 작성하였음. 추가로 알게되는 내용이 있다면 계속해서 작성할 예정.. JPA 1.0 (JSR 220) - 2006년 : 초기 버전, 복합 키와 연관관계 기능이 부족 JPA 2.0 (JSR 317) - 2009년 : 대부분의 ORM 기능을 포함하고 JPA Criteria가 추가 JPA 2.1 (JSR 338) - 2013년 : 스토어드 프로시저 접근, 컨버터, 엔티티 그래프 기능이 추가
[JPA] 데이터베이스 방언, Dialet JPA는 특정 데이터베이스에 종속적이지 않은 기술이다. 따라서 다른 데이터베이스로 손쉽게 교체할 수 있다. 그런데 각 데이터베이스가 제공하는 SQL 문법과 함수가 조금씩 다르다는 문제점이 있다. 예시 ) 데이터 타입 : 가변 문자 타입으로 MySQL은 VARCHAR, 오라클은 VARCHAR2 다른 함수명 : 문자열을 자르는 함수로 SQL 표준은 SUBSTRING(), 오라클은 SUBSTR() 페이징 처리 : MySQL은 LIMIT 사용, 오라클은 ROWNUM 이렇듯 SQL 표준을 지키지 않거나, 특정 데이터베이스만의 고유한 기능을 JPA서는 방언(Dialet)이라 한다. 따라서 개발자가 특정 데이터베이스에 종속되는 기능을 많이 사용하면 나중에 데이터베이스를 교체하기가 어렵다. 그러나 하이버네이트를 초함한..
[JPA] 객체와 테이블의 전격 비교 분석 오늘은 JAVA의 객체와 DB의 테이블의 구조가 어떻게 다른지 살펴보도록 한다 !! 객체는 속성(필드)과 기능(메소드)을 가진다. 객체의 기능은 클래스에 정의되어 있으므로 객체 인스턴스의 상태인 속성만 저장했다가 필요할 때 불러와서 복구하면 된다. 그러나 객체가 단순하면 객체의 모은 속성 값을 꺼내서 파일이나 데이터어베이스에 저장하면 되지만, 부모 객체를 상속받았거나 다른 객체를 참조하고 있다면 객체의 상태를 저장하기는 쉽지 않다. 그래서 자바는 이런 문제를 고려해 객체를 파일로 저장하는 직렬화 기능과 저장된 파일을 객체로 복구하는 역 직렬화 기능을 지원한다. 하지만 이 방법은 직렬화된 객체를 검색하기 어렵다는 문제가 있어 현실성이 어렵다. 현실적인 대안은 관계형 데이터베이스에 객체를 저장하는 것인데, ..
[JPA] 그것은 무엇인가? SQL를 직접 다룰때의 문제점. 지금까지의 SQL 처리방식은 이제 그만! 예를 들어 회원을 조회하는 기능을 개발한다고 가정한다면, 1 ) 회원 조회용 sql을 작성한다. SELECT memeber_id, name FROM memeber WHERE member_id = ? 2 ) JDBC API를 사용해서 SQL을 실행한다. ResultSet rs = statement.executeQuery(sql); 3 ) 조회 결과를 Member 객체로 맵핑한다. Member member = new Member (); member.setMemberId(rs.getString("member_id")); member.setMemberName(rs.getString("member_name")); 이를 통해 알 수 있듯이, ..
[MySQL] DataTime <> UnixTime 표기 변환 PHP 코딩을 하다보면, datetime 필드와 unixtime 의 변환/표기 문제로 고민하는 경우에 MySQL 자체에서 내장함수로 변환 기능을 제공한다. ⌗ DateTime 에서 UnixTime으로 변환 SELECT UNIX_TIMESTAMP('2009-08-01') ⌗ UnixTime에서 DateTime으로 변환 SELECT FROM_UNIXTIME(1249052400)

❥ CHATI Github