Quanto a transação depende da sua arquitetura, se estiver utilizando EJB com uma transação de container ou um spring da vida com aspecto transacional no seu metodo de negocio, não precisa fazer na mão, caso contrário é isso mesmo.
Quanto a exception, evite subir a hibernate exception, isso é detalhe de implementação… aconselho a fazer tipo uma UnexpectedException que encapsula a hibernate exceptino como causa.
Dê mais detalhes de como você pretende usar esse código que dá pra dar umas idéias melhores.