@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. Table 에 Unique 설정
@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 은 다른 글에서 자세히 다뤄보겠다
'개발 > JPA' 카테고리의 다른 글
[JPA] @OneToMany , @ManyToOne 사용하기 (1) | 2024.11.15 |
---|---|
[JPA] @GeneratedValue 사용하기 (0) | 2024.11.14 |
[JPA] DELETE 하기(Delete , DeleteById , DeleteAll) (0) | 2024.11.12 |
[JPA] INSERT , UPDATE 하기(Save , SaveAll) (0) | 2024.11.11 |
[JPA] SELECT 하기(findBy , @Query , @Param , where , and , if test) (0) | 2024.11.10 |
댓글