Java Spring数据存储库不支持';保存后不加载关系

Java Spring数据存储库不支持';保存后不加载关系,java,spring,jpa,caching,triggers,Java,Spring,Jpa,Caching,Triggers,当一个Book对象被持久化时,Insert上的触发器将运行以创建一个事务记录(在一个单独的表中) 当我创建Book实例并保存它时,我希望在transactions()数组中看到该记录,但它一直是空的 Book book = new Book("Moby Dick", "Melville", "hardcover"); book = bookRepository.saveAndFlush(book); if( book != null) assertTrue("There is no tr

当一个Book对象被持久化时,Insert上的触发器将运行以创建一个事务记录(在一个单独的表中)

当我创建Book实例并保存它时,我希望在
transactions()
数组中看到该记录,但它一直是空的

Book book = new Book("Moby Dick", "Melville", "hardcover");
book = bookRepository.saveAndFlush(book);
if( book != null)
    assertTrue("There is no transaction history", book.transactions().size() > 0 );
这总是失败的。这样做(我的旋转尝试重新加载数据):

但是,如果我让这个测试失败,重新启动JUnit,然后查询同一本书,它就拥有触发器添加的事务


因此,必须有某种方法使数据库缓存失效或重新加载,但我看不到它。

这是缓存新实体实例的正常行为。你必须刷新它

编辑: 回应你的评论

关于缓存范围,取决于您在应用程序和使用的平台中如何操作它。在通用容器管理的事务和持久性上下文中,“*1级”缓存作用域附加到持久性上下文,该持久性上下文的生命周期取决于底层的传输。它在事务范围开始时创建,在事务范围结束时释放

我认为上述解决方案对您来说是不可行的,因为您不想关心在您已经找到的每个地方引用实例及其集合。 因此,如果持久性上下文的作用域是所提到的,那么您可以在保存实例并调用方法
flush
后,执行引用实例的技巧

我的意思是,您可以在保存实例和刷新后编辑代码以引用(您必须刷新到数据库)

refresh
method(您可能必须这样做)之后,您将拥有一本全新的书籍及其收藏

如果您想刷新关联的交易实体(它们是实体?),yoo可以将
CascadeType.refresh
添加到
Book.transactions
集合中
也一样。

事实上,我在发布后立即看到了这一点,但答案中的两个选项对我来说都不可行,所以我保留了我的问题。我希望还有别的办法。缓存的范围是什么?我可以创造条件让它再次检查数据库吗?我感谢你的帮助,但是没有
refresh()
方法(如上面的评论所述)。神话般的刷新方法的主体就是问题所要问的(你如何刷新??),所以这并不能让我进一步了解。啊,耶,你是如何定义
图书存储库的?与inteface一样(用于添加查询方法)?在另一种情况下,发布它。我本来打算编辑帖子,但在此之前,让我们确定:refresh是某种自定义命令,还是只是另一种刷新方式-当我加入2个实体时,D@Guillermofaced遇到了同样的问题
public int addBook()
{
    int bookID;
    Book book = new Book("Moby Dick", "Melville", "hardcover");
    book = bookRepository.saveAndFlush(book);
    if( book != null)
        bookID = book.getID();
    return bookID;
}

@Test
public void testNewBookTrans()
{
    int aBook = addBook();
    bookRepository.findAll();
    transactionRepository.findAll();
    Book book = bookRepository.findOne(bookID);
    if( book != null )
        assertTrue("Still no transactions", book.getTransactions().size() > 0);
}
Book book = new Book("Moby Dick", "Melville", "hardcover");
book = bookRepository.saveAndFlush(book);
book = bookRepository.refresh(book);
if( book != null)