【发布时间】:2020-04-03 19:34:50
【问题描述】:
我有一个插入对象的事务方法。调试器显示在eventsDAO.save(..) 上没有发生实际的插入,但只有一个序列提取。我第一次在调试器中看到insert into events_t .. 是在引用刚刚插入的事件时。
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = false)
public void insertEvent(..) {
EventsT eventsT = new EventsT();
// Fill it out...
EventsT savedEventsT = eventsDAO.save(eventsT); // No actual save happens here
// .. Some other HQL fetches or statements ...
// Actual Save(Insert) only happens after some actual reference to this EventsT (below)
// This is also HQL
SomeField someField = eventsDAO.findSomeAttrForEventId(savedEventsT.getId());
}
但我也看到,这仅在所有语句都是 HQL(非本地)时才成立。
只要我在对该表的任何实际引用之前放置一个 Native-SQL Select,即使它没有以任何方式接触该表,它也会强制立即刷新,我会看到在那个确切的时间点在控制台上声明insert into events_t ...。
如果我没有以任何方式使用 Native SQL Select 触摸表 EventsT,为什么此时会发生刷新?
【问题讨论】:
标签: spring hibernate spring-data