[JPA] Entity, Repository

·2024년 8월 13일
0
post-thumbnail

What is Entity?

  • 데이터 모델링에서 사용되는 객체
  • 데이터 베이스 테이블

What is Repository

  • 데이터 베이스 테이블에 접근하기 위해 사용하는 인터페이스
  • 실제로 DB에 접근하는 객체

Entity

기본 코드

@Entity
@Table(name = "PERSON", uniqueConstraints = {
        @UniqueConstraint(name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"})
}) //제약조건 설정
@Access(AccessType.FIELD) // 직적 접근 -> if @Id 가 있으면
@Access(AccessType.PROPERTY) //getter 사용 
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) 
    //IDENTITY, SEQUENCE, TABLE, AUTO(자동으로 선택)
    private Long id;
    private String name
    
    @Enumerated(EnumType.STRING) //Enum의 이름값 저장
    //@Enumerated(EnumType.ORDINAL) //Enum의 순서 저장
    private String role;
    
    @Transient // 매핑을 하지 않음
    private String description;
    
    @Temporal(TemporalType.DATE) //날짜
    @Temporal(TemporalType.TIME) //시간
    @Temporal(TemporalType.TIMESTAMP) //날짜 + 시간
	  private Date regDate;
	  
	  @Column(unique = true)
	  @Column(columnDefinition = "varchar(100) default 'EMPTY'")
	  @Column(nullable = false)
	  @Column(length = 400)
	  @Column(precision = 10, scale = 2) //precision, 자릿수 / scale, 소수점 
}
  • 기본 생성자는 필수이다.

클래스 어노테이션 정리

  • @Entity: 엔티티임을 선언
  • @Table: 테이블의 이름과 제약조건을 설정할 수 있음
    -> @UniqueConstraint: 제약 조건을 설정
  • @Access: 접근 방식 설정
    -> AccessType.FIELD: 직접 접근
    -> AccessType.PROPERTY: getter 사용해서 접근

AccessType.PROPERTY

@Entity
@Access(AccessType.FIELD) // 직적 접근 -> if @Id 가 있으면
@Access(AccessType.PROPERTY) //getter 사용 
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id;
    
    @Transient
    private String firstName;
    
    @Transient
    private String lastName;
    
	  @Access(AccessType.PROPERTY)
	  public String getFullName() {
		  return firstName + lastName;
	  }
	  
}
  • 다음과 같은 방식으로 Getter를 이용하여 접근

변수 어노테이션 정리

  • @Id: 기본키(Primary key)를 설정
  • @GeneratedValue(strategy = GenerationType.AUTO): 기본키를 조건에 따라 자동으로 생성함
  • @Enumerated: Enum 사용을 위한 것
    -> EnumType.STRING: 이름값 저장
    -> EnumType.ORDINAL: 순서 저장
  • @Transient: 매핑을 하지 않음, 테이블에 저장 X
  • @Temporal:날짜 타입 지정
  • @Column: 컬럼 지정

Repository

public interface PersonRepository extends JpaRepository<Person, Long> {
}
  • 다음과 같이 선언이 가능하다.
profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보