-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
강사님 파일 업로드시 실제 DB에서 테이블을 만들려고 합니다.
21.12.19 20:42 작성 조회수 372
1
제가 JPA때 배운 내용을 되돌아보면
강의대로 테이블을 구성하면 에러가 나잖아요?
private Long id;
private String itemName;
private UploadFile attachFile;
private List<UploadFile> imageFiles;
이런 경우 데이터베이스 테이블을 어떻게 만들어야 되나요?
답변을 작성해보세요.
0
Jong Hee Park
질문자2021.12.20
@Entity
@Getter @Setter
public class Item {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) // strategy=GenerationType.IDENTITY 시퀀스를 자기만의 시퀀스를 사용한다는 말.
@Column(name = "item_id")
private Long id;
private String itemName;
@JsonIgnore
@OneToMany(mappedBy = "item")
private List<Image> images = new ArrayList<>();
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) // OneToOne은 접근을 많이 하는 쪽에 FK를 설정한다.
@JoinColumn(name = "file_id") // FK를 delivery_id로 설정.
private File file;
/**
*
* SELECT * FROM item i JOIN `file` f ON i.file_id = f.file_id;
SELECT * FROM item i JOIN image img ON i.item_id = img.item_id;
*/
}
@Entity
@Getter @Setter
public class Image extends UploadFile {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "image_id")
private Long id;
private String uploadFileName;
private String storeFileName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "item_id")
private Item item;
public Image(String uploadFileName, String storeFileName) {
super(uploadFileName, storeFileName);
}
}
@Entity
@Getter @Setter
public class File extends UploadFile {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "file_id")
private Long id;
private String uploadFileName;
private String storeFileName;
@JsonIgnore // 양방향 연관관계에서는 한쪽을 @JsonIgnore 꼭 달아줘야 한다.
@OneToOne(mappedBy = "file", fetch = FetchType.LAZY)
private Item item;
public File(String uploadFileName, String storeFileName) {
super(uploadFileName, storeFileName);
}
}
이렇게 3개로 나눴는데요
하이디sql에서 조인해서 가지고 오게하면 잘 가지고 옵니다. 근데 여기서 궁금한점이
Image나 File이나 둘다 UploadFile 클래스를 상속 받았는데요.
public File(String uploadFileName, String storeFileName) {
super(uploadFileName, storeFileName);
}
이렇게 적어주면 상위 부모클래스로 공통으로 사용할 수 있게 하는건가요? 뭔가 이상하긴 한데 ... ㅠㅠ
Jong Hee Park
질문자2021.12.24
일단 jpa 사용안하고 mybatis로 파일 1개만 저장되게 구성해놨습니다. 실제로 저장도 제대로 되고 데이터 베이스에 경로도 잘 저장되는데 이미지 다중 저장처럼 여러개는 강의 다 듣고 고민해봐야겠습니다. ㅠㅠ
답변 2