【发布时间】:2020-01-30 10:56:05
【问题描述】:
我正在编写更新作为 CRUD 测试的一部分,当我测试我的代码时,我收到一条错误消息,提示找不到实体。我不知道为什么,因为我的搭档做了完全相同的代码,而且他工作得很好。我们俩都无法弄清楚发生了什么。我在 getSingleResult() 方法上遇到错误。
@Test
public void updateBookTest() {
Book book = em.createQuery("select b from Book b where b.title = :title", Book.class).setParameter("title", "createABook").getSingleResult();
tx.begin();
book.setTitle("updatedThisBook");
book.setAuthor("newAuthor");
tx.commit();
Book updatedBook = em.find(Book.class, book.getBookId());
assertEquals(book.getTitle(), updatedBook.getTitle());
assertEquals(book.getAuthor(), updatedBook.getAuthor());
System.out.println("updateBookTest:\t" + book.toString());
tx.begin();
book.setTitle("createABook");
tx.commit();
}
这是我的代码。如果需要更多信息,请告诉我。
【问题讨论】:
-
在 DB 中可能没有提供标题的 Book 实体的记录?您的合作伙伴是否在查询同一个数据库?据我所知,如果在 DB 中找不到符合条件的记录,getSingleResult 将失败。见stackoverflow.com/questions/2002993/jpa-getsingleresult-or-null
-
如果找到超过 1 条记录,
getSingleResult也会失败。检查表中是否有具有相同标题的实体 -
你们是否都从同一个数据库中获取信息?
标签: jpa