2017-12-27 463 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