반응형

jpa 6

JPA - 복합키와 식별 관계 맵핑

JPA 는 영속성 컨텍스트에 보관할 때 식별자를 키로 사용한다고 했다. 식별자 구분시에는 equals 와 hashCode 를 사용하므로 식별자 필드가 2 개 이상이면 별도의 식별자 클래스를 만들어서 equals 와 hashCode 를 구현해야 한다. JPA 에는 복합 키 지원을 위해 @IdClass 와 @EmbeddedId 를 지원한다. 복합키를 사용하는 Characters클래스 복합키 사용시 @IdClass 를 이용하여 식별자 클래스로 맵핑하였다. 식별자 클래스의 특징을 다시한번 살펴보자면 Serializable 을 구현해야 하고, hashCode 와 equals 를 오버라이드 해야한다. 또한 식별자 클래스의 속성명과 엔티티의 속성명이 같아야 한다. 위의Collection 엔티티는 Character 엔..

JPA 2023.05.29

양방향 매핑

객체는 다른 객체를 부를떄 참조를 한다. 하지만 테이블을 FK를 조인으로 이용하여 가져온다. 이러한 둘의 차이가 있는데.. 기존 개발에서는 객체를 테이블에 맞추어 모델링 (참조 대신에 외래 키를 그대로 사용) 하였다. 이를 단방향 연관관계를 이용하면 Menber에 Team 타입으로 변수를 만들어 연결해줄 수 있다. 현재 1개의 팀이 여러명의 멤버를 가질 수 있기때문에 ManyToOne을 team변수에 넣어준다. 이렇게 Team team이 테이블에서 FK로 매핑되는걸 알수 있다. 하지만 멤버에서 팀을 찾을수는 있지만 팀에서는 멤버를 찾을 수 없다. 이때 이제 양쪽을 매핑해주는 양방향 매핑을 사용하면된다.! 멤버는 단방향 매핑때와 동일하게 유지하고 Team클래스에는 Member타입의 리스트를 만들어준다. 보..

JPA 2022.03.16

JPA @Entity @Table @Column

@Entity • @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. • JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 • 주의 • 기본 생성자 필수(파라미터가 없는 public 또는 protected 생성자) • final 클래스, enum, interface, inner 클래스 사용X • 저장할 필드에 final 사용 X 속성: name • JPA에서 사용할 엔티티 이름을 지정한다. • 기본값: 클래스 이름을 그대로 사용(예: Member) • 같은 클래스 이름이 없으면 가급적 기본값을 사용한다 @Table @Table은 엔티티와 매핑할 테이블 지정 name - 매핑할 테이블 이름 (엔티티 이름을 사용) catalog- 데이터베이스 catalog 매핑 schema- 데이터베..

JPA 2022.03.12

에러 해결 [Error executing DDL "alter table scomment drop foreign key] -jpa hibernate의 ddl자동생성 옵션과 초기화 전략

JPA를 이용하여 테이블을 만들던중 joincolumn을 이용하여 테이블이 나오니 에러가 발생하였다. JPA를 사용하면서 spring.jpa.hibernate.ddl-auto옵션을 사용하고있다. 이는 JAVA의 Entity설정을 참고하여 Spring Application실행시점에 Hibernate에서 자동으로 DDL을 생성해 필요한 DATABASE의 Table설정들을 자동으로 수행해주는 기능이다. ddl-auto 옵션 종류 create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop: create와 같으나 종료시점에 테이블 DROP update: 변경분만 반영(운영DB에서는 사용하면 안됨) validate: 엔티티와 테이블이 정상 매핑되었는지만 확인 none: 사용하지 ..

프로젝트 공부 2021.07.30

JPA Query update오류 해결

프로젝트에 조회수를 늘리는 코드를 짜기위해 JPA에 @Query를 이용하던 중 오류가 발생했다. not supported for dml operations ~~~ 찾아보니 UPDATE 쿼리를 실행할 때는 @Modifying annotation 을 붙여줘야한다. 그리고 @Transactional 또한 같이 붙여주도록 하자. 이후 실행을 해보니 Modifying queries can only use void or int/Integer as return type! 이라는 오류가 발생 쿼리 수정은 반환 유형으로 void 또는 int / Integer 만 사용할 수 있다는 뜻이다. Integer로 유형을 바꿔주니 잘 돌아간다.

JPA 2021.06.22
반응형