 <p>If you don't use any transaction annotations the default will be transactions being required. Thus your DAO will run in a transaction and the persistence context will no later be flushed than when the transaction is committed.</p> <p>From the JavaDoc on <code>TransactionAttribute</code>:</p> <blockquote> <p>If the TransactionAttribute annotation is not specified, and the bean uses container managed transaction demarcation, the semantics of the REQUIRED transaction attribute are assumed. </p> </blockquote> <p>From the JavaDoc on <code>FlushModeType</code>:</p> <blockquote> <p>When queries are executed within a transaction, if FlushModeType.AUTO is set on the Query or TypedQuery object, or if the flush mode setting for the persistence context is AUTO (the default) and a flush mode setting has not been specified for the Query or TypedQuery object, the persistence provider is responsible for ensuring that all updates to the state of all entities in the persistence context which could potentially affect the result of the query are visible to the processing of the query. </p> </blockquote> <p>This means that the persistence context might be flushed earlier, if you use a query whose result might be influenced by that flush.</p>