我在广告和QuestionAnswers之间有一对多的关系,现在当我添加一个questionAnswer对象并坚持它时,我看到插入是在QuestionAnswers中进行的,但是我添加的对象并没有改变它的id。
在advert.java中
@OneToMany(mappedBy = "advertisement", cascade = CascadeType.ALL)
public List<QuestionAnswers> getQuestionAnswers() {
return questionAnswers;
}
在questionanswer.java中
@ManyToOne
@JoinColumn(name = "advertisement_id")
public Advertisement getAdvertisement() {
return advertisement;
}
测试用例
public void testAddQA(){
User user=userRepository.findByEmail("abc@gmail.com");
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());
}
不确定发生了什么
答案 0 :(得分:0)
据我所知,当通过级联插入持久化@OneToMany
时(当新项添加到集合中时)hibernate(如果Hibernate被用作JPA提供者)实际上创建了{的新实例{1}}类并替换您添加到QuestionAnswers
集合中的类。这个实例实际上有一个ID。您可以在Advertisement.questions
之后通过调试器检查Advertisement.questions
集合来确认这一点。您应该看到以下图片
advertisementRepository.save(adv);
QuestionAnswers
中包含的实例已生成并设置了ID
Advertisement.questions
的实例实际上是与QuestionAnswers
Advertisement.questions
执行后检查状态可能的替代方法是在保存完成后尝试在advertisementRepository.save(adv);
集合中找到QuestionAnswers
(只要您有办法使用其他字段唯一标识它)。
希望这有帮助。