<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
public xxx xxxSave(@RequestBody @Valid xxxSaveDto request) {
...
}
@NotNull : null을 허용하지 않음
@NotEmpty : null과 ""을 허용하지않음
@NotBlank : null과 ""과 " "을 허용하지 않음
@Size(min=,max=) : 문자열, 배열등의 크기가 만족하는가?
@Pattern(regex=) : 정규식을 만족하는가?
@Max(숫자) : 지정 값 이하인가?
@Min(숫자) : 지정 값 이상인가
@Future : 현재 보다 미래인가?
@Past : 현재 보다 과거인가?
@Positive : 양수만 가능
@PositiveOrZero :양수와 0만 가능
@Negative : 음수만 가능
@NegativeOrZero : 음수와 0만 가능
@Email : 이메일 형식만 가능
@Digits(integer=, fraction = ) : 대상 수가 지정된 정수와 소수 자리 수 보다 작은가?
@DecimalMax(value=) : 지정된 값(실수) 이하인가?
@DecimalMin(value=) : 지정된 값(실수) 이상인가?
@AssertFalse : false 인가?
@AssertTrue : true 인가?
https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-builtin-constraints
public Class User {
@Id
private Long Id;
private String name;
private zipCode;
private address1;
private address2;
}
public Class User {
private Long Id;
private String name;
@Embedded
private Address address;
}
@Embeddable
public Class Address {
private zipCode;
private address1;
private address2;
}
이렇게 embedd한 경우 서로 동일한 필드가 있을 수 있는데 @AttributeOverried를 활용한다
public Class User {
private Long Id;
private String name;
@Embedded
@AttributeOverride(name="zipCode", column=@Column(name="user_zipCode")
@AttributeOverride(name="address1", column=@Column(name="user_address1")
@AttributeOverride(name="address2", column=@Column(name="user_address2")
private Address userAddress;
@Embedded
@AttributeOverride(name="zipCode", column=@Column(name="vendor_zipCode")
@AttributeOverride(name="address1", column=@Column(name="vendor_address1")
@AttributeOverride(name="address2", column=@Column(name="vendor_address2")
private Address venderAddress;
}
게시글과 게시글의 첨부파일처럼 완전히 종속적인 경우에만 사용.
양방향 연관관계인 경우 한쪽을 @JosnIgnore로 끊어줌
member(1), order(n) entity가 있을때
order정보 조회 시 LAZY 걸려 있는 member정보를 바로 가져와야 할 경우
List<Order> all = orderRepository.findAll();
for(Order order : all){
order.getMember().getName();
}
xToMany는 Lazy를 걸어두고 xToOne 관계만 우선 조회.
이후 반복문으로 Lazy 초기화하여 가져옴.
spring.jpa.properties.hibernate.default_batch_fetch_size, @BatchSize 활용
member(1), order(5)있을때
멤버정보 조회 시 order와 조인되어 5row가 생기고 order정보 쿼리가 5번 실행
1. queryDSL에서 fetch 조인 + distinct