我有一个SQL脚本文件,它删除并重新创建各种表,并在这些表中插入各种记录。在SQL查询控制台中执行时脚本运行正常,但我需要它由实体管理器执行。
我对如何做到这一点有什么想法?
谢谢,
ħ
答案 0 :(得分:1)
晚会但是我的表现如何。这里需要注意几点:
这是执行文件的方法:
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();
}