Fala pessoal, tudo certo? eu estava pesquisando sobre como executar sql nativo usando o hibernate, mas não encontrei nada, seria possível? ou só utilizando outra ferramenta? Eu preciso pois tenho arquivos de backup salvos na raiz do meu projeto, e faço uma verificação pra ver se o banco existe ou não, e se não existir ele executaria a query, e até o momento, falta só essa parte de escrever umas simples query sql, segue abaixo o meu código →
public static void main(String[] args) {
checkBd();
}
//Método que verifica se o banco existe, caso não exista chama os métodos necessários para criar o banco
private static void checkBd() {
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("fca");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
} catch (Exception e) {
System.out.println("Não conectou!");
getScriptFiles(getScriptFolder());
}
}
//Este método lê o diretorio "./db/resources/tables/" e retorna a primeira pasta em ordem crescente
private static String getScriptFolder() {
String bdFolder = "";
List<File> scriptFolder = new ArrayList<File>();
File path = new File("./db/resources/tables/");
String[] list = path.list();
for(String folder : list)
{
scriptFolder.add(new File("./db/resources/tables/" + folder));
String dir = scriptFolder.toString();
dir = dir.substring(1, dir.length() - 1);
}
for (File dir : scriptFolder) {
bdFolder = dir.getName();
break;
}
return bdFolder;
}
//Este método pega cada arquivo da pasta com os scripts de criação de tabela
private static void getScriptFiles(String bdFolder) {
String bdCreateFile = "";
List<File> createTableScript = new ArrayList<File>();
File path = new File("./db/resources/tables/"+bdFolder+"/");
String[] list = path.list();
for(String scriptFile : list)
{
createTableScript.add(new File("./db/resources/tables/" + scriptFile));
String file = createTableScript.toString();
file = file.substring(1, file.length() - 1);
}
for (File dir : createTableScript) {
bdCreateFile = dir.getName();
readScriptQuery(bdFolder, bdCreateFile);
}
}
//Este método retorna o script de criação da tabela contido em cada arquivo
private static void readScriptQuery(String folderPath ,String filePath) {
Path path = Paths.get("./db/resources/tables/"+folderPath+"/"+filePath);
try {
List<String> linesArchive;
linesArchive = Files.readAllLines(path);
for (String line : linesArchive) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("Ocorreu um erro" + e.getMessage());
}
}
private static void executeSql(String scriptSql) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("fca");
EntityManager em = emf.createEntityManager();
em.createNativeQuery(scriptSql).executeUpdate();
}