작성
·
519
답변 2
0
@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);
}
이렇게 적어주면 상위 부모클래스로 공통으로 사용할 수 있게 하는건가요? 뭔가 이상하긴 한데 ... ㅠㅠ
일단 jpa 사용안하고 mybatis로 파일 1개만 저장되게 구성해놨습니다. 실제로 저장도 제대로 되고 데이터 베이스에 경로도 잘 저장되는데 이미지 다중 저장처럼 여러개는 강의 다 듣고 고민해봐야겠습니다. ㅠㅠ
0
JPA 사용시 상속 관련하여JPA기본편 - 고급매핑 챕터를 참고해주세요.