데이터베이스에 id 는 존재한다 매번마다 선언해주면 귀찮기 때문에 BaseEntity를 이용하여 상속해준다
@MappedSuperclass //참조 안하고 나는 슈퍼클래스입니다~
@Data
@SuperBuilder //하위클래스가 상위 클래스의 id 를 사용하려면 이걸 써쭤야된다.
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
account 패키지 안에는/
@Entity
@Table(name ="account")
@Data
@EqualsAndHashCode(callSuper = true) //상위 객체와 비교할꺼냐
@SuperBuilder
public class AccountEntity extends BaseEntity {
}
신기하게 All No 안썼음..
AccountApiController 을 실행하게 되면 db 모듈은 bean 으로 등록이 안되어 있기 때문에 문제가 생긴다.
우리는 config 를 만들어서 db모듈도 bean 으로 등록해야 된다.
@Configuration
@EntityScan(basePackages = "org.delivery.db")
@EnableJpaRepositories(basePackages ="org.delivery.db")
public class JpaConfig {
}
또한 중요한거!!! @GeneratedValue(strategy = GenerationType.IDENTITY) 이놈은 직접 빌드 해서 값을 넣어주지 않고 자동으로 1씩 증가시켜주는걸 의미함 autoIncrement 라는 듰
이제 Json 자동 config 하는 법
웹 에서의 config 와 우리가 사용하는 swagger 의 config 필요함
@Configuration
public class ObjectMapperConfig {
@Bean
public ObjectMapper objectMapper(){
var objectMapper = new ObjectMapper();
objectMapper.registerModule(new Jdk8Module()); //jdk 8버전 이상등록
objectMapper.registerModule(new JavaTimeModule()); //local date 시리즈
objectMapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES,false); // 모르는 json필드 무시
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); //비어있는 빈들은 무시한다.
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); //날짜 관련 직렬화
objectMapper.setPropertyNamingStrategy(new PropertyNamingStrategies.SnakeCaseStrategy()); //스네이크
return objectMapper;
}
}
실제로 오브젝트 메퍼가 없으면 spring 은 디폴트로 만든다. 다만 우리가 이렇게 만들경우 이걸 사용한다
'JAVA > 배달웹 프로젝트' 카테고리의 다른 글
5. Jpa 를 이용한 UserEntity 생성 및 공통 annotation 생성 (0) | 2024.06.29 |
---|---|
4. exception , exceptionhandler , interceptor , webConfig (0) | 2024.06.29 |
1. 멀티모듈 및 grade 환경설정 (0) | 2024.06.28 |