开发者

Does session.save() do an immediate insert?

...or does it wait until the associated transaction is committed?

I'm using an HQL query in a loop like this:

tx.begin()
for(...)
{
    sess开发者_如何学Cion.getNamedQuery(...).list()
    ...
    session.save(new MyEntity())
}
tx.commit()

The named query needs to be able to see the entities that were added with the save call. Will it work that way?


It depends on the flush mode of the session. You can also manually flush it with session.flush()

The flush mode can be set in multiple ways - session.setFlushMode(..), entityManager.setFlushMode(..), or via xml configuration (org.hibernate.FlushMode).

The default value is AUTO:

The Session is sometimes flushed before query execution in order to ensure that queries never return stale state. This is the default flush mode.


Try it, if it doesn't, then call

session.flush()

to send the SQL to the DB. Regardless, it won't be committed until the call to

tx.commit()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜