You should probably pipe your transactions through JTA, even if you're using a different implementation behind the scenes. (Hibernate, Webphere, Weblogic, etc). Ideally, it should look like this:
<bean id="transactionImpl" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager ref="transactionImpl"/>
</bean>
If you wanted to use Hibernate's transaction manager instead, just replace the transactionImpl bean's class to the hibernate one in your original question.
As for which manager is better, I honestly can't think of any significant reasons to choose one over the other. The only thing I can think of is it may come into play if you have clustered application servers that share the load, rather than simply being a failover. Maybe transactions can be shared across them? I don't know. If someone can think of something else, feel free to correct me.
EDIT: It looks like WebSphereTransactionManagerFactoryBean (what I used above) doesn't need to be used for WebSphere 6.0 and up, and according to the WebSphere Transaction Manager Spring Docs you should use WebSphereUowTransactionManager as a direct replacement for JTA. So instead of the Hibernate transaction manager in your original example, just use the WebSphereUowTransactionManager class. Spring grabs the transaction manager off of the application server's JNDI tree, so you might have to set some property to specify the JNDI name.
From what I can tell, the WebSphere transaction manager gives you the ability to, among other things, do transaction suspension. Personally I would go with the app server's transaction manager, regardless of whether it was WebSphere or Weblogic or Glassfish or whatever.