Some of the answers depend on the context so in general:
Quote:
Is Transaction.commit() and session.connection().commit() operate on the same database connection? I am asking because I don't want use Transaction API unless it is required.
Yes - You should always be using a transaction when accessing the database. This is even for read only operations.
Quote:
Does Hibernate (Session) maintain some kind of default transaction for me or should I explicitly begin, commit or rollback for each logical unit of work?
Depends on the context. If using a JDBC connection then you will need to start the transaction and commit or rollback at the end. If using a container datasource and CMT then the container will provide the start and commit but you will have to provide the hint to rollback.
Quote:
Does flush(), in addition to executing sql generated due to save() or update(), also generate/execute sql for statments such as add() or remove() in a parent child relation? In other words, do I have to explicitly do a saveOrUpdate() an entity, which is already persistent?
Hibernate has dirty object detection so it will apply to appropriate operation (based on the unSavedValue). If the relationship has appropriate cascading enabled then yes it will update the database relative to the collection operations.