2017-12-27 465 views
0

我收到这个异常,当我试图用消息保存主题: 嵌套异常是javax.persistence.EntityNotFoundException:无法找到带有id的mypackage.model.Message fb8d39ea-0094-410d-975A-ea4495781422无法找到实体..当试图保存数据

下面是该模型:

@Entity 
public class Topic { 
    @Id 
    private String id; 
    private String title; 
    private String projectName; 
    private String author; 
    @OneToMany(mappedBy = "topicId") 
    private Set<Message> messages; 
    public Topic() { 
     this.messages = new HashSet<>(); 
    } 
} 

@Entity 
public class Message { 
    @Id 
    private String id; 
    private String author; 
    private String content; 
    private String topicId; 
} 

控制器:

@RequestMapping(value = "/projects/{projectSubject}", method = RequestMethod.POST) 
    public String createTopic(Model model, @PathVariable("projectSubject") String subject, 
           @RequestParam("title") String title, 
           @RequestParam("message") String messageContent, 
           @RequestParam("author") String author, 
           @RequestParam("projectName") String projectName) { 
     Project project = projectService.findBySubject(projectName); 
     if(project != null){ 
      Topic topic = new Topic(); 
      topic.setId(UUID.randomUUID().toString()); 
      topic.setAuthor(author); 
      topic.setProjectName(projectName); 
      topic.setTitle(title); 

      Message initialPost = new Message(); 
      initialPost.setId(UUID.randomUUID().toString()); 
      initialPost.setContent(messageContent); 
      initialPost.setAuthor(author); 
      topic.getMessages().add(initialPost); 

      topicService.saveTopic(topic); 
     } 
     return "topicList"; 
    } 

服务:

public void saveTopic(Topic topic) { 
     topicRepository.save(topic); 
} 

存储库:

public interface TopicRepository extends JpaRepository<Topic,String> {} 

回答

0

试试这个

@OneToMany(mappedBy = "topicId", cascade = {CascadeType.ALL}) 
private Set<Message> messages; 

当你没有指定的CascadeType,那么框架认为话题对象内部的消息你要保存的已经保存在数据库中,并尝试在Messages表中搜索这些消息,以便它可以将它与要保存在Topic表中的主题对象相关联。
如果指定级联类型,则它会保存所有子对象,然后保存父对象。

+0

它的工作原理!我以前尝试使用cascade = {CascadeType.PERSIST},但它不起作用,这就是为什么我没有使用CascadeType.ALL尝试,谢谢。 – FakeLion