helloworld
에러 해결하기 .. 본문
ExceptionHandlerExceptionResolver : Resolved [org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : cohttp://m.toy.project.file.domain.FileEntity.product -> cohttp://m.toy.project.product.domain.Product; nested exception is java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : cohttp://m.toy.project.file.domain.FileEntity.product -> cohttp://m.toy.project.product.domain.Product]
file 테이블과 product 테이블을 만드는 과정에서 생긴 에러다. 아마도 fk맺다가 생긴 에러인 것 같은데 굉장히 많은 삽질이 필요 할 것 같다..
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Table(name = "file")
public class FileEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "prod_id")
private Product product;
@Column(name = "originalName", nullable = false)
private String originalName;
@Column(name = "size", nullable = false)
private long size;
@Column(name = "createDate", nullable = false)
private Date createDate;
@Column(name = "status", nullable = false)
@ColumnDefault("1")
private int status;
}
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Builder
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long prod_id;//PK
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_num")
private Member member;//fk
@Column(name = "prod_name", nullable = false)
private String prod_name; //상품명
@Column(name = "kind_num")
private int kind_num; //카테고리 번호
@Column(name = "grade", nullable = false)
@ColumnDefault("0.0")
private double grade;//평점
@Column(name = "views", nullable = false)
@ColumnDefault("0")
private long views;//조회수
@Column(name = "cost", nullable = false)
private int cost;//원가
@Column(name = "price", nullable = false)
private int price;//판매가
@Column(name = "profit", nullable = false)
private int profit;//순수익
@Column(name = "description", nullable = false)
private String description;//판매내용
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "reg_date")
private Date reg_date = new Date();
@Column(name = "status", nullable = false)
@ColumnDefault("1")
private int status = 1;//품절 or 상품 내릴시 0
@OneToMany(mappedBy = "product",cascade = CascadeType.ALL)
private List<FileEntity> files;
}
one to many에서 실수 한거 같아보이진 않는데
일단 product는 게시글이고 (지금보니 이름을 바꿔야 할 것 같긴하다.. 애완동물용품웹을 만들고있는데 상품을 올린다고 생각하여 product라 지었는데 이렇게 쓰다보니 괜찮은 것 같기도..)
file은 게시글을 쓸 때 같이 올라갈 사진인데
게시글 : 사진 --> 1 : n
이게 맞지않나.. 1개의 게시글이 있으면 여러개 혹은 한개의 사진이 있고 게시글이 없으면 사진도 존재하지 않는다..
열심히 삽질 해보자 ,,
생각보다 빨리 해결됐다. 무한 구글링 중에 영속성을 각각 따로 설정해주라는 말과 함께 대부분 cacade가 되어있을텐데 그걸 없애면 될 것이라고 한다.. 해봤더니 성공! 로컬pc에 사진 올리는 테스트 중이었는데

50개나 저장 되어버린 사진 ㅠ 아무튼 되서 다행이긴한데

서버를 실행하면 이런 게 엄청 많이 나온다,, 예상에는
show-sql: true
defer-datasource-initialization: true
hibernate:
ddl-auto: create
create라 db 삭제했다 다시 만들텐데 fk가 안지워지는 느낌인 것 같긴한데 ,, 저것도 해결 해야겠지
'toyproject' 카테고리의 다른 글
| Spring Security OAuth.. (0) | 2023.09.13 |
|---|---|
| 로그인 기능 (0) | 2023.09.11 |
| 설계한 DB를 바탕으로 도메인클래스만들기 (0) | 2023.09.02 |
| 프로젝트 DB 설계 (0) | 2023.08.31 |
| 프로젝트 시~작 (2) | 2023.08.31 |