Executar Script SQL com Hibernate [RESOLVIDO]

Olá…

Eu estou desenvolvendo uma aplicacao que quando instala um novo modulo no sistema, o sistema lê o arquivo com o script SQL e executa-o!

No entanto estou com problemas para executar o script!

meu Dao Extende o HibernateDaoSupport do Spring…

ja tentei:

getSession().createSQLQuery(query) [não dispara nenhum erro tb nao cria as tabelas do script no banco]

Att
Dirceu

getSession().executeUpdate(" s q l ");

getSession().executeUpdate(query) … método executeUpdate(String) foi dado com inexistente em Session

no entanto:

getSession().createSQLQuery(query).executeUpdate();

tb não funcionou, a query não é executada! (e não dispara nada)
metodo getHibernateTemplate().create(object) e os demais funcionam tranquilos no meu DAO …
no entanto, qdo faco um método para executar uma query nao funciona

provisoriamente vou criar um conexao JDBC sem hibernate, enquanto nao consigo fazer isso funcionar.

ok, foi mal… esquici do createSQLQuery…

mas vc deve estar esquecendo de dar o commit

exemplo:

public static boolean CorrigePostgres(SessionFactory sfPG){
		boolean res = false;
		
		Vector<String> v = Postgres.LeArquivo("sql.txt");
		
		Session s = sfPG.openSession();
		Transaction t = s.beginTransaction();

		for(int i=0; i<v.size(); i++){
			s.createSQLQuery(v.get(i)).executeUpdate();
		}
  
		try {
			t.commit();
			res = true;
		} catch (Exception e) {
			t.rollback();
			res = false;
		}
	    
		s.close();
		
		return res;
	}

neste caso, meu ‘Postgres.LeArquivo(“sql.txt”)’ é um metodo que retorna um Vector , com várias linhas a serem executadas…

espero ter ajudado!

Por que você não faz isso externamente?
Crie um shell(linux) ou um bat(windows) que execute isto e chame este shell pelo java com o Runtime.getRuntime().exec("…");
Se for oracle, no seu shell você chama o sql plus e manda bala :wink:

o problema de fazer externamente é ter que descobrir qual o sistema operacional… como ele ja tem uma SessionFactory criada, fica facil com o codigo acima!

public void executeSQL(String query) {
getSession().createSQLQuery(query).executeUpdate();
}

só com isso realmente funcionou, da outra vez não sei pq nao funcionou…
[transações deixo tudo sobre responsabilidade do TransactionManager do Spring]

Valeu muito Obrigado.

Sim, P q eu não faco isso extermante?
pq na aplicação que estou denvolvendo, vai ser exibida uma lista de módulos pro usuários instalar, ai qdo ele instala um modulo, serão gerado novas tabelas no banco, novos regras de permissao, novos xml no menu, serão adicionado conteudo no faces-config da aplicacao…

e se eu fizesse bats extermante o usuario (que eu nem sei quem é), teria q executar varios arquivos, ficando bem mais complicado para ele!