inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

org.hibernate.TransientPropertyValueException 질문드립니다.

1226

오기훈

작성한 질문수 4

0

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();

```

jpa java select JPA

답변 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;

감사합니다.

0

오기훈

엔티티를 생성할때, new 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