beginTrans no construtor do DAO Generico

Olá a todos. Estou com uma dúvida sobre colocar o inicio da transação no construtor do dao generico.

Eu sei que funciona. O que gostaria de saber é se causa algum problema de performance ou não é aconselhável. O que vcs acham?
Eis o código.

public class Dao<T> {
    //private static Logger logger = Logger.getLogger(Dao.class);
    private Class persistenceClass;
    private Session session;
    private Transaction tx;

    public Dao(Session session, Class persistenceClass){
        this.session = session;
        this.persistenceClass = persistenceClass;

       tx = this.session.beginTransaction();
    }

    public T load(Long id){
        //logger.info("lendo "+persistenceClass+" com id "+id);
        return (T) session.load(persistenceClass, id);
    }

    public void save(T t){
        //logger.info("salvando "+t);
        session.save(t);
        tx.commit();
    }
    
}

Eu não o aconselho.
Imagine vc criando um Dao só pra buscar um dado no banco.

Dao dao = new Dao();
dao.load(id);

Vc tem uma transação em aberto sem necessidade.
Portanto aconselho vc “encapsular” essa transação, iniciando ela quando for preciso. Tenta faqzer algo do tipo:

Dao dao = new Dao();
SeuObjeto obj = dao.load(id);

dao.beginTransaction();
dao.update(obj);
dao.commit();

dao.close();

Vlew cara.