우노
[Kotlin] @Entity와 @Repository 본문
@Entity
목적
- JPA의 Entity 클래스는 데이터베이스 테이블에 매핑되는 객체입니다.
- 데이터베이스 테이블과 자바 객체 간의 매핑을 담당합니다.
어노테이션
- @Entity: 해당 클래스가 데이터베이스 테이블과 매핑된다는 것을 명시합니다.
- @Table(name = "table_name"): 데이터베이스 테이블 이름을 지정할 수 있습니다.
- @Id: 해당 필드가 기본 키(primary key)임을 지정합니다.
- @GeneratedValue: 기본 키 값의 자동 생성 전략을 지정합니다.
- 예: GenerationType.IDENTITY
- @Column(name = "column_name"): 필드와 데이터베이스 컬럼 간의 매핑을 지정합니다.
특징
- Entity 클래스는 데이터베이스 작업을 직접 수행하지 않고, JPA에서 데이터를 저장하고 관리하기 위한 객체 모델입니다.
- Entity 자체로는 비즈니스 로직을 수행하지 않으며, 단순히 데이터베이스와의 매핑을 위한 구조체 역할을 합니다.
예시
@Entity @Table(name = "user_table") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id") private Long id; @Column(name = "username") private String username; @Column(name = "email") private String email; // Getters and Setters }
복합 기본키 예시
// 복합 기본키 클래스를 @Embeddable로 정의 @Embeddable public class OrderDetailId implements Serializable { private Long orderId; private Long productId; } // 복합 기본키를 @EmbeddedId로 엔티티에 포함 @Entity public class OrderDetail { @EmbeddedId private OrderDetailId id; private Integer quantity; private BigDecimal price; }
@Repository
목적
- Repository는 주로 특정 Entity를 기준으로 데이터베이스에 접근하는 기능을 제공합니다.
- JpaRepository나 CrudRepository를 상속받은 인터페이스는 해당 Entity에 대한 CRUD 기능을 자동으로 제공합니다.
특징
- Repository는 기본적으로 특정 Entity를 다룹니다.
- 이를 기반으로 쿼리 메소드나 네이티브 쿼리를 실행하여 데이터를 처리합니다.
- JpaRepository는 기본적인 CRUD 기능 외에도 페이징, 정렬, 복잡한 쿼리 등을 처리할 수 있습니다.
예시
public interface UserRepository extends JpaRepository<User, Long> { List<User> findByUsername(String username); }
- 위의 예시에서 UserRepository는 User 엔티티와 관련된 쿼리만 다루며,
- findByUsername 메서드는 User 엔티티를 기반으로 데이터를 조회합니다.
nativeQuery 사용 예시
public interface UserRepository extends JpaRepository<User, Long> { @Query(value = "SELECT * FROM another_table WHERE condition = ?1", nativeQuery = true) List<Object[]> findByCustomQuery(String condition); }
- nativeQuery를 사용하면 Entity와 관계없는 다른 테이블을 참조하거나 복잡한 SQL 쿼리를 작성하여 데이터베이스 작업을 할 수 있습니다.
기타
- DataSource 설정
- application.properties 또는 application.yml 파일에서 DataSource를 설정하여 JPA가 사용할 데이터베이스 연결 정보를 제공합니다.
- Spring Data JPA는 이 설정을 통해 데이터베이스와의 연결을 관리하고, Entity에 매핑된 데이터를 쿼리 및 저장합니다.
'Web_App > Kotlin' 카테고리의 다른 글
[Kotlin] Controller와 Service의 계층 구조 (0) | 2024.12.20 |
---|---|
[Kotlin] @SqlResultSetMapping (0) | 2024.12.20 |
[Kotlin] ORM, JPA, Spring Data JPA (1) | 2024.12.18 |
[Kotlin] DTO와 Entity의 관계 (0) | 2024.12.17 |
[Kotlin] @Scheduled 란? (0) | 2024.12.02 |
Comments