분류 전체보기

    [JPA]~~Entity cannot be cast to java.io.Serializleat org.hibernate.type.ManyToOneType.hydate(ManyToOneType.java)

    이슈 발생 원인 - Entity와 Entity의 연관관계중, ID값이 아닌, 특정 컬럼과 연관관계를 맺는경우 아래와 같이 사용해야하는데 @JoinColumn(name = "해당_테이블_컬럼_이름", referencedColumnName = "반대쪽_컬럼_이름") 이 경우 Serializable을 구현해주지 않으면 위 제목과 같은 에러를 만나게 된다. 이유: 영속성 컨텍스트는 엔티티의 PK를 사용해서 엔티티를 관리하는데, JPA를 구현한 하이버네이트 입장에서 지금 PK가 아닌 다른 기준(UNIQUE 필드)으로 데이터를 한번 조회하고, 그 결과에 있는 PK를 다시 찾은 다음에 영속성 컨텍스트에 관리해야 합니다. 이 과정을 풀어내기 위해 하이버네이트 구현체는 객체를 임시로 직렬화(Serializable)해서 ..

    [백기선-코딩으로 학습하는 GOF디자인]3. 추상 팩토리 패턴

    목적: client에서 사용하는 코드를 인터페이스로 변경해서 사용하기 위해사용 관련된 인스턴스들을 하나로 모으는 역활을 한다. BigBirdFactory에서 BigBird와 관련된 모든 인스턴스를 만들고 최종 BigBird인스턴스를 리턴해주는거 같이 추상 팩토리 패턴을 통해 캡슐화의 기능도 함 public interface BirdAbstractFactory { Bird createBird(); } public class BigBirdFactory implements BirdAbstractFactory { private String name; private String speed; public BigBirdFactory(String name, String speed) { this.name = name; ..

    [백기선-코딩으로 학습하는 GOF디자인] 1. 싱글톤 패턴

    싱글톤 패턴 구현방법 1. public class Settings { private static Settings instance; public Settings() { } public static Settings getInstance(){ if(instance == null){ instance = new Settings(); } return instance; } } 두개의 요청중 첫번째 요청에서 new Setting을 통해 인스턴스를 만들기전 또 다른 요청이 들어오면 첫번째 요청에서 생성되기 직전이라 하나를 더 만들게된다.(쓰레드세입하지 않음) 2. public class Settings { ... public static synchronized Settings getInstance(){ if(instan..

    [JPA]JPA,Hibernate, Spring Data JPA차이

    JPA(Java Persistence API), 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스 이다. 즉 자바 어플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의한 방법일 뿐이다. Hibernate는 JPA의 구현체이다. JPA Hibernate EntityManagerFactory, ← - SessionFactory EntityManager ← - Session EntityTransaction ← - Transaction (상속) 위와 같이 상속받고 있고 각각을 Impl로 구현하고 있다고 볼수 있다. 즉 JPA를 사용하기 위해서 반드시 Hibernate를 사용할 필요가 없다는 것이다. Spring Data JPA는 JPA를 쓰기 편하게 만들어 놓은 모듈 S..

    [JPA] 연관관계

    JPA가 사용하는 객체 연관관계 VS 테이블 연관관계의 차이 객체는 참조(주소)로 연관관계를 맺는다. 테이블은 외래 키로 연관관계를 맺는다. 연관된 데이터를 조회할때 객체는 참조를 하지만, 테이블은 조인을 한다. 참조를 통한 연관관계는 단방향 관계이며, 양방향으로 만들어도 사실상, 단방향관계가 2개이다. 💡 객체의 단방향 관계는 [Member.team](http://member.team) 필드를 통해서 팀을 알 수 있지만, team→ member를 접근하는 필드가 없으면 알 수가 없다. 만약 team에서도 알고 싶다면, Member라는 필드를 생성하며 Team.member를 통해 접근 할 수 있도록 양방향 관계를 맺어줘야 한다. public Static void main(){ Member member1 ..

    [JPA]객체지향쿼리

    JPQL JPQL은 엔티티 객체를 조회하는 객체지향 쿼리다. JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않으며, SQL에 비해 간결하다. @Entity(name="MEMBER") public class Member{ @Column(name="name") private String username; } //사용 String jpql = "select m from Member as m where m.username = "kim" List resultList = em.createQuery(jpql, Member.class).getResultList(); 작성한 JPQL을 실행하려면 쿼리 객체를 만들어야 한다. 쿼리 객체는 TypeQuery와 Query가 있는데 반환할 타입을 명확하게 지정할 수..

    [QueryDsl]

    Querydsl 프로젝트 셋팅 .... ** com.querydsl querydsl-apt ${querydsl.version} provided com.querydsl querydsl-jpa ${querydsl.version} ** ... ** com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor ** spring: datasource: url: jdbc:h2:tcp://localhost/~/querydsl username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-a..

    [JPA] 엔티티의 생명주기

    엔티티에는 4개의 상태가 존재한다 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태 영속(managed): 영속성 컨텍스트에 저장된 상태 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 비영속 - 엔티티 객체를 생성한 직후 아무것도 안한 상태로 순수한 상태(저장하기 전 상태) 영속 - 엔티티 매니저를 통해 엔티티 영속성 컨텍스트에 저장한 상태 , 즉 영속성 컨텍스트에 의해 관리된다는 뜻\ - em.persist() 준영속 - 영속성 컨텍스트가 관리하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않는 상태, - 영속성 컨텍스트가 관리하지 않으려면 em.detach()를 호출하면 됨, 또는 em.close(), em...

    [JPA] 영속성 컨텍스트

    엔티티를 영구 저장하는 환경 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. 특징: - 영속성 컨텍스트는 엔티티를 식별자 값(@Id로 테이블의 기본 키와 매핑한 값)이 없으면 예외가 발생한다. 영속 상태는 식별자 값이 반드시 있어야 한다. - JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터베이스에 반영하는데, 이것을 플러시라고 한다. 장점: - 1차 캐시 : 영속성 컨텍스트는 내부에 캐시를 가지고 있고, 이것을 1차 캐시라고 한다. 영속 상태의 엔티티는 모두 이곳에 키는 @Id로 매핑하고, 값은 엔티티 인스턴트 형태로 저장된다. 1. 조회가 발생시, 1차 캐시에서 식별자 값으로 엔티티를 찾는다. 만약 엔티티가..

    [스프링 핵심 원리-고급] 템플릿 콜백 패턴

    다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 콜백이라고 한다. 프로그래밍에서 콜백 또는 콜에프터 함수는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다. 자바 언어에서의 콜백 1. 자바 언어에서 실행 가능한 코드를 인수로 넘기려면 객체가 필요하다. 자바8부터는 람다를 사용할 수 있다. 2. 자바 8이전에는 보통 하나의 메소드를 가진 인터페이스를 구현했고, 주로 익명 내부 클래스를 사용했다. 3. 최근에는 주로 람다를 사용한다. 스프링에서의 템플릿 콜백 패턴(ex-> XxxTemplate) - JdbcTemplate, RestTemplate, TransactionTemplate, Redi..