* 오류가 뜬 경우 아마 무한 참조 오류가 발생했을것입니다. 발생하지않은 경우
로직 만들기 2 로 가도 무방합니다.
public void 사진업로드(ImageUploadDto imageUploadDto, PrincipalDetails principalDetails){
UUID uuid = UUID.randomUUID(); //uuid 하는 이유 = 만약 같은이름의 파일이 uuid 없이 올라온다면 덮어씌워지기 때문에
String imageFileName= uuid+"_"+ imageUploadDto.getFile().getOriginalFilename(); //1.jpg
System.out.println("이미지 파일 이름 =" + imageFileName);
Path imageFilePath = Paths.get(uploadFolder+imageFileName); //실제 경로 적어야함
//통신 , I/O 일어날때는 예외가 발생할 수 있기때문에 예외처리 해야함
try{
Files.write(imageFilePath,imageUploadDto.getFile().getBytes());
//첫번째로 경로,2. 실제 파일을 byte화 해서 넣어야함, 3.옵션값인데 생략가능
}catch(Exception e){
e.printStackTrace();
}
Image image = imageUploadDto.toEntity(imageFileName,principalDetails.getUser());
Image imageEntity = imageRepository.save(image);
System.out.println(imageEntity);
}
imageService에서 사진업로드() 메서드의 맨마지막
Sysout imageEntity 떄문에 오류가 발생하는데.
그 이유는 sysout 메소드가 실행되면서 imageEntity에 대한 각 데이터(필드)들을 읽어올때
toString이 실행된다 (toString은 롬복의 @Data에 의해 자동으로 생성됨) 결과적으로
image 도메인의 내부를 하나씩 실행하다가 image 의 User 필드를 만나서
User가서 또 실행하다가 <List>image를 만나고 무한 반복되기 때문에 오류가 발생하는 것이다.
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
@Entity
public class Image {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String caption;
private String postImageUrl; // 사진을 전송받아서 그 사진을 서버에
// 폴더에 저장하게될것 - DB에는 경로를 인서트
@JoinColumn(name="userId") //foreign 키 이름 지정
@ManyToOne // 한명이 많은 이미지를 올릴 수 있고 이미지는 하나의 이미지가 여럿일수없으니
private User user; // db에 오브젝트 자체를 저장할 순 없고 이대로면 foreign key로 저장됨
//이미지 좋아요
//이미지 댓글
private LocalDateTime createDate;
@PrePersist
public void createDate() {
this.createDate = LocalDateTime.now();
}
@Override
public String toString() {
return "Image{" +
"id=" + id +
", caption='" + caption + '\'' +
", postImageUrl='" + postImageUrl + '\'' +
", createDate=" + createDate +
'}';
}
}
그렇기 때문에 image 도메인에서 toString을 따로 호출한 후 User에 대한 부분을 지워주면 오류가 해결된다.
'Spring > JPA + Security' 카테고리의 다른 글
[Spring Data JPA] 구독하기 구현하기 - 1 구독 정보 DB 완성 및 구현 (0) | 2023.01.10 |
---|---|
[Spring Data JPA]게시물 띄우는 로직 만들기 -2 뷰 렌더링 (0) | 2023.01.10 |
[Spring Data JPA] 게시판 띄우는 로직 만들기 - 1 양방향 맵핑 및 이미지 뷰 렌더링 (0) | 2023.01.10 |
[Spring Data JPA] JPA를 사용한 이미지 업로드 (0) | 2023.01.08 |
[Spring Data JPA] JPA를 사용한 구독하기 3 - 구독하기 로직 구현하기 (0) | 2023.01.08 |
댓글