본문 바로가기
개발/JPA

[JPA] Entity 설정하기

by 코딩하는 흰둥이 2024. 11. 13.
@Entity
@Entity             // JPA 의 Entity class 라고 지정            
public class Board {
	...
    ...
}

 

@Entity(name = "Board") // name 으로 class 를 지정하기도 하는데 없으면 default 로 class 명을 따라간다        
public class Board {
	...
    ...
}

 

 

 

@Table
@Entity                // JPA 의 Entity class 라고 지정
@Table(name = "Board") // Entity 와 연결할 Table 명을 지정
public class Board {
	...
    ...
}

 

 

 

@Id
@Entity                         // JPA 의 Entity class 라고 지정
@Table(name = "Board")          // Entity 와 연결할 Table 명을 지정
public class Board {

    // Primary Key 인 기본 키를 지정한다
    @Id
    private Long no;
    
  }

 

 

 

@GeneratedValue
@Entity                         // JPA 의 Entity class 라고 지정
@Table(name = "Board")          // Entity 와 연결할 Table 명을 지정
public class Board {

    // Primary Key 인 기본 키를 지정한다
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)     // pk 값이 자동으로 증가된다
    @GeneratedValue(strategy = GenerationType.SEQUENCE)     // 시퀀스를 사용하여 기본 키를 생성한다
    @GeneratedValue(strategy = GenerationType.TABLE)        // 테이블을 이용하여 키를 생성한다
    @GeneratedValue(strategy = GenerationType.AUTO)         // JPA 에서 자동으로 키를 생성한다
    private Long no;
    
}

 

GenerationType.IDENTITY 을 사용하는 경우

AUTO_INCREMENT 기능이 있는 Mysql , MariaDb, Sql Server 등은 잘 동작하지만

Oracle 에서는 해당 기능이 12c 이상부터 가능하며, 

대부분은 GenerationType.SEQUENCE 을 이용한다고 한다

 

@GeneratedValue 은 다른 글에서 자세히 다뤄보겠다

 

 

 

@Column
@Entity                         // JPA 의 Entity class 라고 지정
@Table(name = "Board")          // Entity 와 연결할 Table 명을 지정
public class Board {

	...
    ...

    // Table의 컬럼과 매핑시킨다 , nullable 로 null 허용을 설정 한다 , default = true 다
    @Column(nullable = false)
    private String title;
    
    // length 로 문자열 최대 길이를 설정한다
    @Column(nullable = false , length = 20)
    private String writer;
    
    // 데이터 타입에 최대길이는 설정 , 기본값 N , 컬럼 코멘트 를 설정한다
    @Column(columnDefinition = "VARCHAR(1) DEFAULT 'N' COMMENT '삭제여부'")
    private String testFlag;
    
    // CURRENT_TIMESTAMP
    // 데이터 타입, 기본 값은 현재 , null 허용하지 않음
    @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP", nullable = false)
    private LocalDateTime created;

    // SYSDATE - Oracle 사용시
    // 데이터 타입, 기본 값은 현재 , null 허용하지 않음
    @Column(columnDefinition = "TIMESTAMP DEFAULT SYSDATE", nullable = false)
    private LocalDateTime created;
 	
    // insert 를 못하게 설정한다 default 는 true 다
    @Column(insertable = false)
    private String testInsert;

    // update 를 못하게 설정한다 default 는 true 다
    @Column(updatable = false)
    private String testUpdate;
}

 

 

 

 

Unique 설정하기

 

1. TableUnique 설정

@Entity                         // JPA 의 Entity class 라고 지정
// Entity 와 연결할 Table 명을 지정 , 여러개의 유니크 설정
@Table(name = "Board" , uniqueConstraints = { 
        @UniqueConstraint(
                name = "uniqueTest", // 유니크제약 이름
                columnNames = {"writer" , "name"}
        )
})
public class Board {
	...
    ...
    @Column(nullable = false)
    private String writer;

    @Column(nullable = false)
    private String name;
    
}

 

 

 

2. Column 에 Unique 설정

@Entity                         // JPA 의 Entity class 라고 지정
@Table(name = "Board")		// Entity 와 연결할 Table 명을 지정
public class Board {
	...
    ...
    // 유니크 키로 지정한다
    @Column(nullable = false , unique = true)
    private String writer;

    @Column(nullable = false)
    private String name;
    
}

 

 

 

@Lob
@Entity                         // JPA 의 Entity class 라고 지정
@Table(name = "Board")		// Entity 와 연결할 Table 명을 지정
public class Board {
	...
    ...
    // CLOB , BLOB 데이터 타입
    @Lob
    private String contents;
    
}

 

 

 

@Transient
@@Entity 
public class Board {
	...
	...

    // DB 에 매핑하지 않는 객체다
    @Transient
    private String testColumn;
    
}

 

 

 

Join
@Entity                         
@Table(name = "Board")
public class Board {

	...
    ...
    
    // 일대일 join 을 설정한다
    // 한쪽에서만 설정하면 단방향 join 이라고 한다
    @OneToOne
    @JoinColumn(name = "test_id", referencedColumnName = "id")
    private TestEntity testEntity;
    
    
    
    // 다대일(현재 Entity : 1)  의 관계로 join 을 설정한다
    @ManyToOne
    @JoinColumn(name = "test_id" , referencedColumnName = "id", nullable = false)    // 현재 테이블의 외래키를 설정한다 , TestManyToOne Entity 의 기본키 지정
    private Test test;
    
    
    
    // 일대다(현재 Entity : 여러 테이블) 의 관계로 join 을 설정한다
    @OneToMany(mappedBy = "TestManyToOne")      // mappedBy = "TestManyToOne" 은 다른 Entity 에서 @joinColumn 에서 설정한 객체 명
    private List<Board> board = new ArrayList<>();
    
}

 

Join 은 다른 글에서 자세히 다뤄보겠다

 

댓글