문제점

블로그에 좋아요 기능을 구현하는데 다음과 같은 오류가 발생했다.

 

 

 

해결방안

Post 클래스에 @DynamicInsert, @DynamicUpdate를 달고 likeCount에 @ColumnDefault("0")을 달았더니 해결됐다.


@Entity
@Getter
@Setter
@DynamicInsert
@DynamicUpdate
@NoArgsConstructor
@Table(name = "post")
public class Post extends TimeStamped {

...

    @ColumnDefault("0")
    @Column(name = "like_count", nullable = false)
    private Integer likeCount;

...

}

 

 

 

알게 된 점

null인 필드값이 insert시 제외되게 하기 위해서는 Entity에 @DynamicInsert를 붙여야 한다.

null인 필드값이 update시 제외되게 하기 위해서는 Entity에 @DymamicUpdate를 붙여야 한다.

'TIL > WEEK9' 카테고리의 다른 글

스트림  (0) 2023.07.10

난수 스트림 만들기

        IntStream intStream = new Random().ints();
        IntStream intStream = new Random().ints(7,5, 10);// 5<= <10 랜덤 숫자 7개
        intStream.limit(10).forEach(System.out::println);

IntStream ints() : int 타입의 난수들로 이루어진 스트림을 반환한다. 괄호 안을 비워두면 limit()으로 크기를 제한해 줘야 된다. 그렇지 않으면 무한 스트림이 생성된다.

LongStream longs(), Doubles doubles()등도 있다.

 

ints(5) : 크기가 5인 정수 난수 스트림을 반환

ints(7, 5, 10) : 크기가 7인 5 이상 10 미만의 정수로 이루어진 난수 스트림 반환

 

        Stream<Integer> intStream = Stream.iterate(0, n -> n+2);
        intStream.limit(10).forEach(System.out::println);

 

Stream.iterate(0, n -> n+2) : 초기값이 0이면서 n+2를 수행하는 무한 스트림 반환 limit으로 크기를 지정해 줘야 한다.

iterate와 generate는 IntStream과 같은 기본형 스트림 타입의 참조 변수로 다룰 수 없다.

IntStream evenStream = Stream.iterate(0, n -> n+2); // 에러

 

중간 연산 : 연산 결과가 스트림인 연산, 여러 번 가능

최종 연산 : 연산 결과가 스트림이 아닌 연산, 한 번만 가능

 

 

 

 

 

 

 

import java.util.Comparator;
import java.util.stream.Stream;

public class Ex14_5 {
    public static void main(String[] args) {

        Stream<Student> studentStream = Stream.of(
                new Student("이자바", 3, 300),
                new Student("김자바", 1, 200),
                new Student("안자바", 2, 100),
                new Student("박자바", 2, 150),
                new Student("소자바", 1, 200),
                new Student("나자바", 3, 290),
                new Student("감자바", 3, 180)
        );

        studentStream.sorted(Comparator.comparing(Student::getBan)).forEach(System.out::println);

    }
}

class Student implements Comparable<Student> {
    String name;
    int ban;
    int totalScore;

    public String getName() {
        return name;
    }

    public int getBan() {
        return ban;
    }

    public int getTotalScore() {
        return totalScore;
    }

    public Student(String name, int ban, int totalScore) {
        this.name = name;
        this.ban = ban;
        this.totalScore = totalScore;
    }

    @Override
    public String toString() {
        return String.format("[%s, %d, %d]", name, ban, totalScore);
    }

    public int compareTo(Student s) {
        return s.totalScore - this.totalScore; // 총점 내림차순을 기본 정렬로 한다.
    }
}

String.format() : 문자열의 형식을 설정한다. %d 정수, %s 문자열 등

sorted(Comparator.comparing(Student::getBan)) : 반을 기준으로 정렬한다. (기본 설정은 총점으로 해둠)

sorted(Comparator.comparing(Student::getBan)) 적용했을 때의 결과 - 반으로 정렬

 

sorted() 기본 정렬의 결과 - 총점 순으로 정렬

+ Recent posts