작성
·
342
0
OrderService에서 order메소드에
public Long order(Member member, Item item) 이런식으로 id가 아닌 엔티티 객체를 바로 받는 식으로 제 개인 프로젝트에서 비슷한 방식으로 해봤습니다.
Question과 member가 서로 양방향 매핑관계이구요
public class Question {
@Id
@GeneratedValue
@Column(name = "question_id")
private Long id;
private String title;
private String content;
private String username;
@CreationTimestamp
private LocalDateTime dateTime;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
public void setMember(Member member) {
this.member = member;
member.getQuestionList().add(this);
}
}
public class Member {
@Id @GeneratedValue
@Column(name = "member_id")
private Long id;
private String emailId;
private String username;
private String password;
private int age;
@OneToMany(mappedBy = "member")
private List<Question> questionList=new ArrayList<>();
OrderService에서 question을 save할 때
public Question save(Member member,Question question) {
question.setMember(member);
question.setUsername(member.getUsername());
question.setTitle(question.getTitle());
question.setContent(question.getContent());
questionRepository.save(question);
return question;
}
failed to lazily initialize a collection of role: post.study.entity.Member.questionList, could not initialize proxy - no Session
(제 개인 프로젝트라 엔티티 경로가 다릅니다.)
이런식으로 에러가 나더라구요. 이게 controller 단에서 들어온 엔티티라 해당 서비스 트렌젝션 내에서는 JPA가 관리해주지 않는 준영속 상태 같은 개념인 것 같은데 정확하게 개념이 잡히지 않아서 질문드립니다.
public Question save(Long memberId, Long questionId) {
Member member = memberRepository.findById(memberId).get();
Question question = questionRepository.findById(questionId).get();
question.setMember(member);
question.setUsername(member.getUsername());
question.setTitle(question.getTitle());
question.setContent(question.getContent());
questionRepository.save(question);
return question;
}
id값을 받아서 해당 서비스 트렌젝션 내에서 직접 엔티티를 조회해야 같은 트렌젝션 내에서 엔티티가 JPA에 의해 관리되서 그런건가요? 개념을 정확히 잡고 싶습니다!
답변 1
0
안녕하세요, gogoDevelop 님! 공식 서포터즈 codesweaver 입니다.
오류 메시지는 Transaction 범위 밖에서 엔티티를 사용할 떄 발생하는 문제입니다.
다음의 링크를 참조하여 이 부분을 먼저 확인해주세요.