본문 바로가기
MySql

MySQL Hibernate 네이티브 쿼리로 삽입은 java.util.Date에서 작동하지 않습니다.

by 베이스 공부 2020. 10. 16.
반응형

Mysql 데이터베이스와 함께 Hibernate JPA 및 Spring을 사용하고 있으며 다음과 같은 SQL 문을 사용하여 삽입하고 싶습니다.

Date saveDate = new Date();
java.sql.Timestamp timeStampDate = new Timestamp(saveDate.getTime());
Query persistableQuery = entityManager.createNativeQuery("INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, "
        + "TITLE, NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) VALUES ("
        + true +", " + timeStampDate + ", " + description + ", " + title + ", "
        + needsLevelId + ", " + patientId + ", " + userId + " )");
persistableQuery.executeUpdate();

하지만 실행 후 다음 오류가 발생합니다.

WARN : org.hibernate.util.JDBCExceptionReporter - SQL Error: -11, SQLState: 37000
ERROR: org.hibernate.util.JDBCExceptionReporter - Unexpected token: 15 in statement
    [INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, TITLE,
    NEEDS_LEVEL_ID, PATIENT_ID, USER_ID)
    VALUES (true, 2011-03-01 15?, any description, , 193, 1, 3 )]

누군가 제발 도와 주시겠습니까?

추신. 네이티브가 아닌 방식으로 최대 절전 모드를 사용하는 것을 알고 있지만 네이티브 방식을 사용해야합니다. 나는 또한 삽입 ... from ...이지만 그것이 도움이 될 것이라고 생각하지 않습니다.

마지막으로 문제는 주로 날짜에 있다고 생각합니다. Java를 사용하여 MySQL에서 datetime 유형을 어떻게 전달합니까?

업데이트 :

다음은 잘 작동하며 mysql datetime 변환 문제에 대한 Java 날짜라고 생각합니다.

("INSERT INTO TASK_ASSESSMENT "
     + "(ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, TITLE, "
     + "NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) "
     + "VALUES (true, 1999-12-22, '" + description + "', '" 
     + title + "', " + needsLevelId+", " + patientId 
     + ", " + userId + ")");

누구든지 java.util.Date 를 MySQL datetime 으로 변환하는 방법에 대해 저를 도울 수 있습니까?

 

해결 방법

 

연결을 사용하여 쿼리에 데이터를 삽입하지 말고 대신 매개 변수를 사용하세요. 값의 잘못된 표현과 다른 많은 문제를 해결합니다.

entityManager.createNativeQuery(
    "INSERT INTO TASK_ASSESSMENT (ACTIVE_FLAG, ASSESSMENT_DATE, DESCRIPTION, "
    + "TITLE, NEEDS_LEVEL_ID, PATIENT_ID, USER_ID) VALUES (?, ?, ?, ?, ?, ?, ?)")
    .setParameter(1, true)
    .setParameter(2, saveDate, TemporalType.TIMESTAMP) // Since you want it to be a TIMESTAMP
    .setParameter(3, description)
    .setParameter(4, title)
    .setParameter(5, needsLevelId)
    .setParameter(6, patientId)
    .setParameter(7, userId) 
    .executeUpdate();

 

참조 페이지 https://stackoverflow.com/questions/5157051

 

 

반응형

댓글