Table 'scheduleplus.schedule' doesn't exist
GenerationTarget encountered exception accepting command : Error executing DDL "
alter table schedule
add constraint FKa50n59y1j4a6qwa42p8jiguds
foreign key (user_id)
references user (id)" via JDBC [Table 'scheduleplus.schedule' doesn't exist]
String
으로 선언했더니 그랬었다.Long
이 아니니 테이블 생성이 안됐다.@GeneratedValue(strategy = GenerationType.IDENTITY)
는나는 사진처럼 컬럼 순서를 정렬해서 사용하고 싶은데
순서를 내가 지정할 수 없으셈ㅋ
컬럼 순서를 고정시킬 수 있는 보편적인 방법이 없으며,
하이버네이트가 자동으로 생성해주는 DDL은 신뢰성이 떨어지기 때문에
실제 운영 환경에서는 JPA로 생성된 테이블의 DDL을 참고하여
개발자가 직접 스키마를 정의하고 관리하는 것을 권장한다고 한다.
spring.jpa.hibernate.ddl-auto=none
으로 설정하고schema.sql
로 테이블 생성 SQL을 직접 작성했다~내용이 길어져서 하나의 글로 정리해보았다.
QueryString, FormData를 받기위한 DTO는 final로 설정하는 것이 국룰이다.
→ 불변성 보장, 신뢰할 수 있는 객체 설계
기본 생성자의 경우, 최대한 접근제어자를 통해 관리하자.
→ 무분별한 객체 생성 방지
생성자가 두개 이상일 경우
→ @JsonCreator
로 어떤 생성자를 사용할 것인지 지정해주어야 한다.
이 내용도 길어져서 하나의 글로 정리해보았다. ㅎㅎ
❓ 나는 안써도 되던뎅?
하이버네이트가 도와준것임ㅋ
따라서 JPA에서 가이드한 것처럼 기본 생성자를 제발 넣자!
❓ 왜 기본 생성자는 private을 붙이면 안되나용?
- JPA가 엔티티에 지연로딩(lazy)으로 접근할 때,
하이버네이트가 프록시(가짜) 객체를 생성해서 사용하기 때문이라고 한다.- 프록시 객체는 실제 엔티티 객체를 상속받은 객체이기 때문에
상속하기 위해public
또는protected
이어야 한다.
@AllArgsConstructor
를 무분별하게 사용하는 것 같다는 피드백이 있었다.
두개의 차이점을 알고 제대로 사용해보자..