org.hibernate.TransientPropertyValueException 질문드립니다.
1226
작성한 질문수 4
https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21720?tab=curriculum&volume=1.00
프로젝션(SELECT) 강의 4분쯤 보던중 오류를 만나게 되었습니다.
java.lang.IllegalStateException: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : jpql.domain.Member.team -> jpql.domain.Team
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:151)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1366)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1349)
at jpql.JpqlMain.main(JpqlMain.java:27)
찾아보던 중 ManyToOne 또는 OneToMany 관계시
Team의 FK 값 을 영속화 하지 않은 채 Member를 영속화 하여 오류가 난다고 하여
2가지 해결책을 찾아보았습니다.
1. Team 을 생성후 영속화, 그리고 member.setTeam(team) 으로 팀을 멤버에 추가
2. @ManyToOne(cascade=CascadeType.ALL) 로 영속성 전이 설정
하지만, 강의를 보던중 4:20 초 영상을 보니 강사님의 예제 실행시
TEAM_ID 는 NULL로 들어간 것이 확인 되었습니다.
위의 1번은 Team을 set 했기 때문에 FK 가 당연히 있었고,
2 번을 실행시 FK 값은 있었지만 Team의 name이 Null로 값이 들어가 있었습니다.
@ManyToOne의 optional이나, mappedBy의 nullable에 대해 설정은 하시지 않은거같은데
제가 빠트린 무언가 있을까요 ?!
Member.java
```
@Entity
public class Member {
public Member(){
}
@Id @GeneratedValue
private Long id;
private String username;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID", nullable = true)
private Team team = new Team();
```
> Team.java
```
@Entity
public class Team {
public Team() {
}
@Id @GeneratedValue
private Long id;
private String name;
@OneToMany(mappedBy = "team")
private List<Member> members = new ArrayList<>();
```
> JpqlMain.java
```
Member member1 = new Member();
member1.setUsername("member1");
member1.setAge(35);
em.persist(member1);
em.flush();
em.clear();
List<Member> result = em.createQuery("SELECT m FROM Member m", Member.class)
.getResultList();
Member findMember = result.get(0);
findMember.setAge(28);
tx.commit();
```
답변 1
1
안녕하세요. 오기훈님
public class Member {
public Member(){
}
@Id @GeneratedValue
private Long id;
private String username;
private int age;
@ManyToOne
@JoinColumn(name = "TEAM_ID", nullable = true)
private Team team = new Team(); //이 부분을 변경해주세요.
다음을 참고해서 수정해주세요.
//기존 코드
private Team team = new Team();
//변경 코드
private Team team;
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
55
2
inheritance startegy 선택시 고려사항
0
39
1
Entity 동등성 비교
0
41
1
실무 조언 관련 질문입니다.
0
65
1
H2데이터베이스 파일 생성
0
76
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
67
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
63
1
JPQL 메소드와 락
0
63
1
Delivery @OneToOne
0
70
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
104
2
UnsupportedOperationException 발생
0
97
3
H2 Database 연결이 안됩니다.
0
102
2
연관관계 매핑 질문드립니다.
0
94
2
h2데이터베이스 실행오류
0
114
2
persistence.xml
0
119
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
88
1
영속성 컨텍스트
0
75
1
JPA 프록시
0
106
1
Native Query와 MyBatis
0
81
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
97
1
임베디드 타입 예시 코드 관련 질문
0
126
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
101
3
인텔리제이 패키지 커서 단축키 질문
0
112
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
152
1





