Q:

Hibernate EntityListeners - PrePersist methods modifying model before persist called - what if the persist call fails?

As above- if the persist call fails, we've modified the model which will mean we're working with the (now modified, but not actually persisted due to an exception) model. If this was inside a Service layer rather than an EntityListener, we could actually change back any properties that we change before the DAO is called at all in any exception handling on that particular class.
For this reason - would changes to the model as described be best restricted to 'Service' layer objects, rather than 'Listeners' (which should only really be used for extra information that we want to persist, rather than actual model data that we will use in the future)?

A:

The problem it's not with modifying the model but the semantic of the modification.
You could see in this example from Hibernate documentation a good use of @PrePersist to change the lastUpdate date from a model before persisting it. This method only modifies what could be qualified as meta-data.
public class LastUpdateListener {
    /**
     * automatic property set before any database persistence
     */
    @PreUpdate
    @PrePersist
    public void setLastUpdate(Cat o) {
        o.setLastUpdate( new Date() );
    }
}

If what you want is modify business-model data the service layer its where you need to put the code as it is where other people expects it to be (http://en.wikipedia.org/wiki/Principle_of_least_astonishment).

