2017-11-26 3 views
0

데이터베이스에 저장하는 엔티티의 ID를 가져 오는

public class MovieEntity { 
... 
    @OneToMany(mappedBy = "movie", cascade = CascadeType.ALL) 
    private Set<MovieOtherTitle> otherTitles; 
... 
} 

이 목록에 개체를 추가, 객체는 자동으로 ID

movie.getOtherTitles().add(movieOtherTitle); 

idsToAdd.add(Iterables.getLast(movie.getOtherTitles()).getId()); 

을 할당해야 내가 기업에 대한 매핑 목록을 한 https://zapodaj.net/ac2bf2eccf8bf.png.html

그러나 엔티티가 ID를받지 못하는 것으로 나타났습니다. 왜?

+0

지속성/병합 중에 만 ID가 생성됩니다. – Bedla

+0

흠,이 "MovieOtherTitle"엔티티가 무엇인지 궁금하네요? 나는 그것의'@ Id' 필드가 무엇으로 정의되어 있는지 궁금합니다. 나는 SQL이 발행 한 것이 '지속 (persist)'을 수행 할 때 무엇이 ​​었는지 궁금하다. – DN1

답변

0

엔티티는이 엔티티를 데이터베이스에 저장하거나 지속 한 후에 만 ​​ID를 수신합니다. 그래서 그 id를 갖도록 엔티티를 저장해야합니다.

귀하의 경우에는 Movie 엔터티 자체가 업데이트 될 때 OtherTitles 하위 엔터티가 저장되거나 업데이트되는 곳에서 Cascade.All을 사용하고 있습니다. 따라서 하위 엔티티의 값을 저장/업데이트하도록 하위 엔티티의 값을 업데이트 한 후 Movie 엔티티를 업데이트해야합니다.

movie.getOtherTitles().add(movieOtherTitle); 
// save the movie here to get the movie with its child entities updated 
moveiRepository.save(movie); 
idsToAdd.add(Iterables.getLast(movie.getOtherTitles()).getId()); 
+0

질문은 "이유"입니다. 당신은 당신의 대답에서 이것을 지적해야합니다. – idmean

+0

이유는 그가 부모 엔티티를 저장하지 않았기 때문입니다. –

+0

@idmean 이것은 이전 질문입니다. https://stackoverflow.com/questions/47487723/entity-update-in-entitymanager/47489901?noredirect=1#comment81948965_47489901 이것은 동일한 스레드의 또 다른 질문입니다. 그래서 왜 투표가 내려 졌는지 모르겠다. !! 그 질문에 대한 답변을 제공해주었습니다. –