2017-04-05 3 views
0

QuestionAnswerオブジェクトを追加して永続化するときに、広告とQuestionAnswersの間に1対多の関係があります。QuestionAnswersで挿入が行われていますが、そのIDを変更しないでください。 questionanswer.javaOneToMany関係で追加されたオブジェクトのIDが更新されない

@ManyToOne 
@JoinColumn(name = "advertisement_id") 
public Advertisement getAdvertisement() { 
    return advertisement; 
} 

でadvertisement.java

@OneToMany(mappedBy = "advertisement", cascade = CascadeType.ALL) 
public List<QuestionAnswers> getQuestionAnswers() { 
    return questionAnswers; 
} 

テストケース

public void testAddQA(){ 
    User user=userRepository.findByEmail("[email protected]"); 
    Advertisement adv=new Advertisement(); 
    adv.setAdvertisementStatus(statusRepository.findByStatus("A")); 
    adv.setMaximumPrice(new BigDecimal(12)); 
    adv.setDescription("blabla"); 
    adv.setAdvertiser(user); 
    advertisementRepository.save(adv); 

    QuestionAnswers ans=new QuestionAnswers(); 
    ans.setAdvertisement(adv); 
    ans.setQuestion("blabla"); 
    ans.setQuestionDate(new Date()); 
    ans.setBidder(user); 
    adv.addQuestions(ans); 

    advertisementRepository.save(adv); 
    assertNotNull(ans.getId()); 


} 

ない限りときPE、私は承知していますよう

答えて

0

を何が起こっているか確認してください(hibernateがJPAプロバイダとして使用されている場合)、実際にQuestionAnswersクラスの新しいインスタンスを作成し、追加したものをAdvertisement.questionsコレクションに置き換えます。このインスタンスには実際にIDがあります。これは、advertisementRepository.save(adv);の後にデバッガを使用してAdvertisement.questionsコレクションを調べることで確認できます。あなたは、次の画像にIDが生成され、それに設定されているAdvertisement.questions内に含まれる

  1. QuestionAnswersインスタンスが表示されるはずです
  2. QuestionAnswersのあなたのインスタンスは、実際に、その後1はAdvertisement.questions
  3. に含まれている別のインスタンスを確認してくださいですadvertisementRepository.save(adv);が実行された後でのみ状態を調べる

可能性のある代替案は、あなたが他のフィールドを使ってそれを一意に識別する方法を持っていれば、保存が完了した後、Advertisement.questionsのコレクション内の10を検索します。

これが役に立ちます。

関連する問題