我有一个 SQL 脚本文件,它删除并重新创建各种表以及将各种记录插入这些表中。该脚本在 SQL 查询控制台中执行时运行良好,但是我需要它由实体管理器执行。
关于我将如何做到这一点的任何想法?
谢谢,
H
我有一个 SQL 脚本文件,它删除并重新创建各种表以及将各种记录插入这些表中。该脚本在 SQL 查询控制台中执行时运行良好,但是我需要它由实体管理器执行。
关于我将如何做到这一点的任何想法?
谢谢,
H
派对迟到了,但我就是这样做的。这里需要注意几点:
这是执行文件的方法:
void executeStatements(BufferedReader br, EntityManager entityManager) throws IOException {
String line;
while( (line = br.readLine()) != null )
{
entityManager.getTransaction().begin();
entityManager.createNativeQuery(line).executeUpdate();
entityManager.getTransaction().commit();
}
}
我是这样称呼它的:
InputStream sqlFileInputStream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("geo-data.sql");
// Convert input stream to something that can be read line-by-line
BufferedReader sqlFileBufferedReader = new BufferedReader( new InputStreamReader(sqlFileInputStream));
executeStatements(sqlFileBufferedReader, dao.getEntityManager());
我名义上用 1 个事务而不是每条语句 1 个进行测试(请注意,这意味着 1 个错误的查询会破坏一切)并且执行时间是相同的:
void executeStatements(BufferedReader br, EntityManager entityManager) throws IOException {
String line;
entityManager.getTransaction().begin();
while( (line = br.readLine()) != null )
{
entityManager.createNativeQuery(line).executeUpdate();
}
entityManager.getTransaction().commit();
}