복붙노트

[SPRING] Mysql에서 EntityManager JPA로 스크립트 실행

SPRING

Mysql에서 EntityManager JPA로 스크립트 실행

스크립트 (.sql 파일)를 실행하려고하는데 여러 가지 방법을 시도 했으므로 배수 오류가 있습니다. 여기에 내 주요 SQL 스크립트가 있습니다.

INSERT INTO `Unity` VALUES (11,'paq',0,'2013-04-15 11:41:37','Admin','Paquete','Paq',0,'2013-04-15 11:41:37','AAA010101AAA',NULL);
INSERT INTO `product` VALUES (11,'chi','USD','chi one',0,'2013-04-15 11:42:13',0,'Admin','Chi name',0.25,0,15,'2013-04-15 11:42:13','AAA010101AAA',NULL);

그리고 여기 내 주요 DAO 코드 :

@Autowired
private EntityManager em;
@Override
public Integer runSql(String path) {
    try {
        Archivo archivo = new Archivo();
        String strQuery = archivo.readFileText(path);
        Query query = em.createNativeQuery(strQuery);
        return query.executeUpdate();
    } catch (IOException e) {
        e.printStackTrace();
        return 0; //TODO return false;
    }
}

만약 내가 하나의 삽입 스크립트를 실행하면 괜찮아 실행하지만 내 스크립트가 하나 이상의 삽입을 가지고 다음과 같은 예외가 발생 :

여러 삽입을 사용하여 스크립트 파일을 실행하는 방법이 있습니까?

나는 또한 BEGIN, END, START TRANSACTION AND COMMIT으로 시도했지만 좋은 결과는 없었다.

도움을 주셔서 감사합니다 :)

해결법

  1. ==============================

    1.내가 아는 것처럼 당신은 em.createNativeQuery에 의해 스크립트를 실행할 수 없다. 스크립트를 명령문으로 분할하여 하나씩 실행해야합니다.

    내가 아는 것처럼 당신은 em.createNativeQuery에 의해 스크립트를 실행할 수 없다. 스크립트를 명령문으로 분할하여 하나씩 실행해야합니다.

    ScriptRunner를 사용할 수 있습니다. MyBatis와 별도로 사용할 수 있습니다.

    예:

    em.getTransaction().begin();
    Connection connection = em.unwrap(Connection.class);
    ScriptRunner sr = new ScriptRunner(connection);
    sr.runScript(new StringReader("INSERT INTO `Unity` VALUES (11,'paq',0,'2013-04-15 11:41:37','Admin','Paquete','Paq',0,'2013-04-15 11:41:37','AAA010101AAA',NULL);\r\nINSERT INTO `product` VALUES (11,'chi','USD','chi one',0,'2013-04-15 11:42:13',0,'Admin','Chi name',0.25,0,15,'2013-04-15 11:42:13','AAA010101AAA',NULL);"));
    em.getTransaction().commit();
    
  2. from https://stackoverflow.com/questions/16826524/run-script-with-entitymanager-jpa-on-mysql by cc-by-sa and MIT license